了解Java的格式string中的$
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") // -> " dcba"
在这种情况下,为什么将2附加到$?
2
与$
无关:
-
%
=格式string的开始 -
4$
=第四个参数('d') -
2
=两个宽度(右alignment) -
s
=string的types
2$
表示从列表中的第二个参数。 $
跟在一个数字之后。 同样, 4$
意味着在这里提出4$
论点。
为了澄清,我们可以将%2$2s
格式分解成几部分:
-
%
– 表示这是一个格式string -
2$
– 显示第二个值参数应放在这里 -
2
– 格式是两个字符长 -
s
– 将该值格式化为string
您可以在文档中find更多信息。
这些是位置参数,其中%4$2s
信号将第四个参数格式化为宽度为2的string。在为参数需要重新sorting而不触及源代码的本地化提供string时,这是特别有用的。
用于表示date和时间的types的格式说明符具有以下语法:
%[argument_index$][flags][width]conversion
可选的
argument_index
是一个十进制整数,表示参数列表中参数的位置。 第一个参数是由"1$"
引用的,第二个参数是"2$"
等。 – Formatter文档
4 $:第四个值参数%:格式string2:间距(参数的长度)s:其string格式
例如,下面的代码片段:
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个字符的间距
dcba
用2代替5将产生以下输出:
DCBA
看到不同? 🙂