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$
средства выдвигают здесь четвертый аргумент.Чтобы уточнить, мы можем разбить
%2$2s
формат на части:%
- указывает, что это строка формата2$
- показывает, что сюда следует поместить второй аргумент значения2
- формат состоит из двух символовs
- форматировать значение как строкуВы можете найти больше информации в документации .
источник
Это позиционные аргументы, в которых
%4$2s
сигналы форматировать четвертый аргумент как строку шириной 2. Это особенно полезно при предоставлении строк для локализации, где аргументы необходимо переупорядочить, не затрагивая исходный код.источник
%
: строка формата4$
: четвертый аргумент значения2
: width (длина при выводе аргумента)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 символов на аргумент, дополненная пробелами)
и замена
5
на2
, даст следующий результат:Увидеть разницу? :)
источник