了解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

看到不同? 🙂