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.Это особенно полезно при предоставлении строк для локализации, где аргументы необходимо переупорядочить, не затрагивая исходный код.
Спецификаторы формата для типов, которые используются для представления даты и времени, имеют следующий синтаксис:
% [аргумент_индекс $] [флаги] [ширина] преобразование
Необязательный
индекс_аргумента
является десятичным целым числом, указывающим позицию аргумента в списке аргументов. На первый аргумент ссылается"1 $"
, на второй -"2 $"
и т. Д. - Документация по форматированию