Понимание $ в строках формата Java
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("%4s %3s %2s %1s", "a", "b", "c", "d")
// -> " d c b a"
в этом случае, почему 2 добавляется к $?
4 ответа:
The
2
не имеет ничего общего с$
:
%
= начало строки формата4$
= четвертый аргумент ('d')2
= ширина двух (выравнивание по правому краю)s
= тип строка
The
2$
значит поставить второй аргумент из списка здесь. Элемент$
следующее число не предшествует ему. Точно так же,4$
означает поставить здесь четвертый аргумент.чтобы уточнить, мы можем разбить в части:
%
- указывает, что это формат строки
2$
- показывает, что второй аргумент значения должен быть помещен здесь
2
- формат состоит из двух символов
s
- отформатируйте значение в виде строкивы можете найти более подробную информацию документации.
это позиционные аргументы, где
%4s
сигналы в формате четвертый аргумент в виде строки с шириной 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("%4s %3s %2s %1s", "a", "b", "c", "d"); System.out.println(sb);
выход :
//расстояние в 5 символов между двумя символами
d c b a
и замена 5 на 2, даст следующий результат:
d c b A
видите разницу? :)