Подтвердить что ты не робот

Как использовать String.format() в Java для репликации вкладки "\ t"?

Я печатаю данные по строкам и хочу, чтобы они были организованы как таблица.

Я изначально использовал firstName + ", " + lastName + "\t" + phoneNumber.

Но для некоторых более крупных имен номер телефона выталкивается из выравнивания

Я пытаюсь использовать String.format() для достижения этого эффекта. Может ли кто-нибудь сказать мне синтаксис формата?

Я пробовал String.format("%s, %s, %20s", firstName, lastName, phoneNumber), но это не то, что я хочу. Я хочу, чтобы это выглядело так:

Джон, Смит             123456789

Боб, Мэдисон         123456789

Чарльз, Ричардс 123456789

Изменить: Кажется, что эти ответы работают для System.out.println(). Но мне нужно, чтобы он работал на JTextArea. Я использую textArea.setText()

Разработал это. По умолчанию JTextArea не использует моноширинные шрифты. Я использовал setFont(), чтобы изменить это, и теперь он работает как шарм. Спасибо всем за решения.

4b9b3361

Ответ 1

рассмотрите использование отрицательного числа для вашего спецификатора длины: %-20s. Например:

   public static void main(String[] args) {
     String[] firstNames = {"Pete", "Jon", "Fred"};
     String[] lastNames = {"Klein", "Jones", "Flinstone"};
     String phoneNumber = "555-123-4567";

      for (int i = 0; i < firstNames.length; i++) {
        String foo = String.format("%-20s %s", lastNames[i] + ", " + 
             firstNames[i], phoneNumber);
        System.out.println(foo);
      }   
   }

возвращает

Klein, Pete          555-123-4567
Jones, Jon           555-123-4567
Flinstone, Fred      555-123-4567

Ответ 2

Попробуйте поместить ширину во второй заполнитель с знаком - для правильного заполнения как:

  String.format("%s, %-20s %s", firstName, lastName, phoneNumber)

Это даст заданную ширину второму аргументу (фамилии) с правильным дополнением, и номер телефона начнется только после указанной строки ширины.

EDIT: Демо:

String firstName = "John";
String lastName = "Smith";
String phoneNumber = "1234456677";
System.out.println(String.format("%s, %-20s %s",firstName, lastName, phoneNumber));

печатает:

Джон Смит               1234456677

Ответ 3

Единственная альтернатива - это цикл списка имен, вычисление максимальной длины строки и добавление пробелов по мере необходимости после каждого имени, чтобы гарантировать, что все числа начинаются в одном столбце.

Использование вкладок имеет disavantage, что вы не можете знать a priori, сколько пробелов эквивалентно вкладке, поскольку оно зависит от редактора.