Понимание $ в строках формата 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("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
// -> " d c b a"
В этом случае, почему 2 добавляется к $?
4 ответа
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);
вывод:
// расстояние 5 символов между двумя символами
d c b a
и замена 5 на 2, даст следующий результат:
DCBA
Увидеть разницу?:)