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附加到$?
答案 0 :(得分:118)
2
与$
:
%
=格式字符串的开头4$
=第四个参数('d')2
=宽度为2(右对齐)s
=字符串类型答案 1 :(得分:47)
2$
表示将列表中的第二个参数放在此处。 $
跟随不在其前面的数字。同样,4$
意味着在这里提出第四个论点。
为了澄清,我们可以将%2$2s
格式细分为以下部分:
%
- 表示这是格式字符串
2$
- 显示第二个值参数应放在此处
2
- 格式为两个字符
s
- 将值格式化为String
您可以找到更多信息in the documentation。
答案 2 :(得分:3)
这些是位置参数,其中%4$2s
表示将第四个参数格式化为宽度为2的字符串。这在为本地化提供字符串时特别有用,其中参数需要重新排序而不触及源代码。
用于表示日期和时间的类型的格式说明符具有以下语法:
%[argument_index$][flags][width]conversion
可选
argument_index
是十进制整数,表示参数列表中参数的位置。第一个参数由"1$"
引用,第二个参数由"2$"
引用,等等 - Formatter documentation
答案 3 :(得分: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);
产生一个输出:
- d- c- b- a-
(每个参数宽度为5个字符,用空格填充)
并将5
替换为2
,将产生以下输出:
- d- c- b- a-
看到区别? :)