Отформатированная печать в Java

У меня есть этот код:

public String toString(Day day)
{
    String s = day.getDayName() + "    " + day.toString();
    return s;
}

Это - toString метод класса Дня:

public String toString()
{
    String s = "";
    for (Slot slot: slots)
        s += slot.toString();
    return s;
}

При вызывании и снова это печатает:

barbi
 monday    10: X 11:   12:   2:   3:   4:
 tuesday    10:   11:   12:   2:   3:   4: X
 wednesday    10:   11:   12:   2:   3:   4:
 thursday    10:   11:   12:   2:   3:   4:
 friday    10:   11:   12:   2:   3:   4:
    bobbi
 monday    10:   11:   12:   2:   3:   4:
 tuesday    10:   11:   12:   2:   3:   4:
 wednesday    10:   11:   12:   2:   3:   4:
 thursday    10:   11:   12:   2: X 3:   4:
 friday    10:   11:   12:   2:   3:   4:
    bunny
 monday    10:   11:   12:   2:   3:   4:
 tuesday    10:   11:   12:   2:   3:   4:
 wednesday    10:   11:   12:   2:   3:   4:
 thursday    10:   11:   12:   2:   3:   4:
 friday    10:   11:   12:   2:   3:   4:

Однако я хотел бы распечатать его этот путь:

barbi, income is $95.00
Monday    10:   11:   12: X 2:   3:   4:
Tuesday   10:   11:   12:   2:   3:   4:
Wednesday 10:   11:   12:   2:   3:   4:
Thursday  10:   11:   12:   2:   3:   4:
Friday    10:   11:   12:   2:   3:   4:
bobbi, income is $45.00
Monday    10:   11:   12:   2:   3:   4:
Tuesday   10:   11:   12:   2:   3: X 4:
Wednesday 10:   11:   12:   2:   3:   4:
Thursday  10:   11:   12:   2:   3:   4:
Friday    10:   11:   12:   2:   3:   4:
bunny, income is $0.00
Monday    10:   11:   12:   2:   3:   4:
Tuesday   10:   11:   12:   2:   3:   4:
Wednesday 10:   11:   12:   2:   3:   4:
Thursday  10:   11:   12:   2:   3:   4:
Friday    10:   11:   12:   2:   3:   4:

Я знаю, что это работает с отформатированной печатью в Java. Но у меня нет подсказки, как сделать это.

5
задан Peter Mortensen 11 July 2010 в 21:18
поделиться

3 ответа

Это задание для java.util.Formatter

    String[][] kvs = {
            { "Name", "Johnny" },
            { "Age", "19" },
            { "Sex", "Female" },
    };
    for (String[] kv : kvs) {
        System.out.println(
            String.format("%-10s:%10s", kv[0], kv[1])
        );
    }

Это выводит:

Name      :    Johnny
Age       :        19
Sex       :    Female

Синтаксис

%[flags][width]conversion
  • - - это флаг для выравнивания по левому краю
  • s - это String преобразование

On String конкатенация

Обратите внимание, что вы никогда не должны строить String , используя + = в цикле. Вместо этого следует использовать StringBuilder .

StringBuilder sb = new StringBuilder();
for (Slot slot: slots) {
    sb.append(slot.toString());
}
return sb.toString();

Связанные вопросы

3
ответ дан 14 December 2019 в 08:44
поделиться

Вы могли бы использовать String.format(), который будет принимать ширину.

Я думаю, вы можете изменить:

String s = day.getDayName() + "    " + day.toString();

на:

return String.format("%9s %s", day.getDayName(), day.toString());

и получить то, что вы хотите.

4
ответ дан 14 December 2019 в 08:44
поделиться

Вы проверили java.util.Formatter? Он доступен начиная с версии 1.5.

0
ответ дан 14 December 2019 в 08:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: