Изменить символ заполнения по умолчанию в Java printf?

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

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

Ответ 1

Неа. Пространство жестко запрограммировано. Здесь фрагмент файла 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(' ', '#'));

Ответ 2

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

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


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

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


output: d c b a