Проблема
Проблема в том, что заполнение в %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());