Изменить символ заполнения по умолчанию в Java printf? - PullRequest
6 голосов
/ 03 апреля 2012

Если мы сделаем System.out.printf("%10s", "1"); по умолчанию, пробелы будут добавлены, чтобы заполнить 10, верно?Есть ли способ изменить это?

Я знаю, вы можете добавить 0, указав 0 перед s, но поддерживает ли printf что-нибудь еще?

Ответы [ 2 ]

9 голосов
/ 03 апреля 2012

Неа.Пространство жестко запрограммировано.Вот фрагмент кода java.util.Formatter даже:

private String justify(String s) {
    if (width == -1)
    return s;
    StringBuilder sb = new StringBuilder();
    boolean pad = f.contains(Flags.LEFT_JUSTIFY);
    int sp = width - s.length();
    if (!pad)
    for (int i = 0; i < sp; i++) sb.append(' ');
    sb.append(s);
    if (pad)
    for (int i = 0; i < sp; i++) sb.append(' ');
    return sb.toString();
}

Если вы хотите получить другие отступы, вы можете сделать пост-форматную замену или что-то подобное:

System.out.print(String.format("%10s", "1").replace(' ', '#'));
0 голосов
/ 03 апреля 2012

Вы можете использовать любое число, например:

System.out.printf("%77s", "1");


Вы можете сделать больше форматирования, используя метод форматирования, например:

System.out.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d");


вывод: d c b a

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...