Ответ 1
2
не имеет ничего общего с $
:
-
%
= Начало строки формата -
4$
= Четвертый аргумент ('d') -
2
= ширина двух (выравнивание по правому краю) -
s
= тип строки
StringBuilder sb = new StringBuilder();
// Send all output to the Appendable object sb
Formatter formatter = new Formatter(sb, Locale.US);
// Explicit argument indices may be used to re-order output.
formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
// -> " d c b a"
В этом случае, почему 2 присоединяется к $?
2
не имеет ничего общего с $
:
%
= Начало строки формата4$
= Четвертый аргумент ('d')2
= ширина двух (выравнивание по правому краю)s
= тип строки 2$
означает, что здесь приведен второй аргумент из списка. $
следует за рядом не предшествует. Точно так же 4$
означает следующий аргумент здесь.
Чтобы уточнить, мы можем разбить формат %2$2s
на его части:
%
- указывает, что это строка формата
2$
- показывает, что второй аргумент значения следует указывать здесь
2
- формат длится два символа
s
- форматируйте значение как строку
Вы можете найти дополнительную информацию в документации.
Это позиционные аргументы, где %4$2s
сигнализирует форматировать четвертый аргумент как строку с шириной 2. Это особенно полезно при предоставлении строк для локализации, где аргументы необходимо переупорядочить, не касаясь исходного кода.
Спецификаторы формата для типов, которые используются для представления дат и времени, имеют следующий синтаксис:
%[argument_index$][flags][width]conversion
Необязательный
argument_index
- десятичное целое число, указывающее позицию аргумента в списке аргументов. Первый аргумент ссылается на"1$"
, второй - на"2$"
и т.д. - Документация форматера
%
: строка формата
4$
: четвертый аргумент
2
: ширина (длина при печати аргумента)
s
: это преобразование строкового аргумента
например, следующий фрагмент:
StringBuffer sb=new StringBuffer();
Formatter formatter=new Formatter(sb,Locale.UK);
formatter.format("-%4$5s-%3$5s-%2$5s-%1$5s-", "a", "b", "c", "d");
System.out.println(sb);
производит вывод:
- d- c- b- a-
(ширина 5 символов на аргумент, дополненная пробелами)
и замена 5
на 2
приведет к следующему выводу:
- d- c- b- a-
Увидеть разницу? :)