Если мы сделаем System.out.printf("%10s", "1"); по умолчанию, пробелы будут добавлены, чтобы заполнить 10, верно?Есть ли способ изменить это?
System.out.printf("%10s", "1");
Я знаю, вы можете добавить 0, указав 0 перед s, но поддерживает ли printf что-нибудь еще?
0
s
printf
Неа.Пространство жестко запрограммировано.Вот фрагмент кода 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(' ', '#'));
Вы можете использовать любое число, например:
System.out.printf("%77s", "1");
Вы можете сделать больше форматирования, используя метод форматирования, например:
System.out.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d");
вывод: d c b a