Как правильно форматировать текст с помощью printf() (Java)

#java #printf

#java #printf

Вопрос:

Здравствуйте, я хочу напечатать что-нибудь, чтобы они были выровнены.

     for (int i = 0; i < temp.size(); i  ) {
        //creatureT  = "["   temp.get(i).getCreatureType()   "]";
        creatureS = "t"   temp.get(i).getName();
        creatureT = " ["   temp.get(i).getCreatureType()   "]";
        System.out.printf(creatureS   "a",creatureT   "n");
   }
  

и на выходе получается

     Lily      [Animal]
    Mary         [NPC]
    Peter      [Animal]
    Squash          [PC]
  

Я просто хочу, чтобы [Animal], [NPC] и [PC] были выровнены следующим образом

     Lily      [Animal]
    Mary      [NPC]
    Peter     [Animal]
    Squash    [PC]
  

Допустим, я знаю, что ни одно имя не будет длиннее 15 символов.

Комментарии:

1. наверняка некоторые из ваших прошлых ответов помогли вам. Почему бы не принять некоторые из них? Это показало бы, что вы цените время и усилия, потраченные на попытку помочь вам.

Ответ №1:

Я думаю, вы обнаружите, что все форматирование намного проще выполнять в самой строке формата, т.Е.

 System.out.printf("t%s [%s]n", creature.getName(), creature.getCreatureType());
  

что бы печатать

   Lily [Animal]
  etc...
  

Вы можете ознакомиться с документацией по форматированию строк о точном формате, который следует использовать для печати строки с минимум 15 пробелами для достижения эффекта выравнивания, что-то вроде

 System.out.printf("ts[%s]n", creature.getName(), creature.getCreatureType());
  

Ключевым моментом является указание «ширины» в 15 символов для первого элемента в списке аргументов в s .

Ответ №2:

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

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

 Creature t = temp.get(i);
System.out.printf("ts [%s]n", t.getname(), t.getCreatureType());
  

Ответ №3:

форматирование подобным образом s делает что-то вроде строки текста правильным. Вы должны написать %-15s, чтобы освободить место для первой строки на 15 диаграммах. 1-я строка будет выровнена по левому краю, а следующая строка будет начинаться с 16-й диаграммы

 Lily           [Animal]
Mary           [NPC]
Peter          [Animal]
Squash         [PC]