Как выровнять элементы массива по столбцам с помощью string.format

#java #string-formatting #string.format

Вопрос:

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

 14 Nigel Nachtricht Software Engineer 93 30 9 Inga Issacs Telemarketing Rep 54 32 20 Tenille Tucker Account Renewals Rep 74 32 35 Franklin Fraser Corporate Controller 91 32 39 Jonathan Jacobs VP Finance 59 32 8 Henry Henderson Field Marketing Manager 81 33 13 Marjory MacDonald Software Engineer 94 33  

Это мой код, который у меня есть до сих пор, но я немного застрял, потому что он получает правильные только первые элементы, а пара целых чисел в конце не выстраивается в линию. Это неэффективно и немного случайно — формат string.все еще довольно нов для меня.

 for(int i = 1; i lt; strLastName.length; i  )  {    String strIdFormat = String.format("%1$-5s", intId[i]);  String strLastNameFormat = String.format("%1$-5s", strLastName[i]);  String strFirstNameFormat = String.format("%1$-15s", strFirstName[i]);  String strRoleFormat = String.format("%1$-15s", strRole[i]);  String strAgeFormat = String.format("%1$20d", intAge[i]);  String strGradeFormat = String.format("%1$10d", intGrade[i]);    String[] nEw = {strIdFormat, strFirstNameFormat, strLastNameFormat, strRoleFormat, strAgeFormat, strGradeFormat};    for(int j = 0; j lt; nEw.length; j  )  {  System.out.print(nEw[j]);    if(nEw[j] == nEw[5])  {  System.out.println("n");  }  }    }  

Вот что печатает мой код:

 28 Anna AbernathyVP Sales - EMEA 58 74  27 Avery AndersonJr. Account Rep 60 73  1 Abigail ArmstrongCEO amp; Chairman 56 71  29 Brett BurkeDirector Sales - France 52 89  2 Benjamin BurtonExecutive Assistant 61 65  3 Charles ChapmanPresident amp; COO 40 71  

Если бы кто-нибудь мог помочь, я был бы очень признателен!

Ответ №1:

Вы выделили 5 пробелов для фамилии. Все они длиннее этого, и String.format устраняет невозможность попросить его вставить строку длиной 20 в слот «%5s», просто выполнив обход. Либо напишите код, который удалит лишнее, если вы хотите с этим справиться ( x.substring(0, 5) ), либо сделайте его 5 в формате вашей фамилии намного больше.

Кроме того, ваше «если» для добавления новой строки должно быть просто if (i == 5) , подумайте об этом.

Также немного странно, что вы отдельно отформатировали все это. Вы можете использовать только один строковый формат, и он вам не нужен 1$ . Возможно, прочтите документы и поиграйте с тем, что String.format можно сделать.