java - ширина форматирования печати - PullRequest
0 голосов
/ 25 сентября 2018

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

Account holder   Social security number
Steve jensen                 XXXXXXXXX
Mary Chapman                 XXXXXXXXX
Steve Zappa                  XXXXXXXXX
Frank Vai                    XXXXXXXXX
Yuzo Shimomura               XXXXXXXXX

Возможно ли это вообще?Я добился лучших результатов, оправдав фамилию влево, а справа - число, подобное этому

ps.printf("%s %-12s",bankarray[count].getFirst(),bankarray[count].getLast());
ps.printf("%17d",bankarray[count].getSoNumber());

, но это меня до сих пор не дало.

Account holder   Social security number
Steve jensen         XXXXXXXXX
Mary Chapman        XXXXXXXXX
Steve Zappa          XXXXXXXXX
Frank Vai            XXXXXXXXX
Yuzo Shimomura      XXXXXXXXX

Должен быть четкий путьчто я просто не вижу.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 25 сентября 2018

Проблема

Проблема в том, что заполнение в %s %-12s дополняет только последний атрибут (bankarray[count].getLast()).Если вы выполните следующий код, вы получите правильно выровненные тексты, даже если строки имеют разную длину.

Код

System.out.printf("%s %-12s", "Firstname", "Last");
System.out.printf("%17d%n", 123456789);
System.out.printf("%s %-12s", "Firstname", "Lastname");
System.out.printf("%17d%n", 123456789);

Вывод

Firstname Last                123456789
Firstname Lastname            123456789

Однако следующее может испортить его, поскольку первый атрибут не заполнен.

Код

    System.out.printf("%s %-12s", "First", "Lastname");
    System.out.printf("%17d%n", 123456789);
    System.out.printf("%s %-12s", "Firstname", "Lastname");
    System.out.printf("%17d%n", 123456789);

Вывод

First Lastname            123456789
Firstname Lastname            123456789

Решение

Я не совсем уверен, что возможно заполнить 2 строки одновременно с printf, поэтому я бы предложил объединить bankarray[count].getFirst() и bankarray[count].getLast() вне оператора printf.

String name = String.format("%s %s", bankarray[count].getFirst(), bankarray[count].getLast());

ps.printf("%s-12s", name);
ps.printf("%17d", bankarray[count].getSoNumber());

Дополнительно: заполнение номера карты

Вам не нужно дополнять номер карты, если вы вводите имятак как он просто оттолкнет номер карты с места, где закончился предыдущий пэд.Этого должно быть достаточно (и то же самое):

String name = String.format("%s %s", bankarray[count].getFirst(), bankarray[count].getLast());

// Added 12+17=29 as padding
ps.printf("%s-29s", name);
// Removed padding enteirely
ps.printf("%d", bankarray[count].getSoNumber());
...