理解$ Java格式的字符串

时间:2009-12-16 14:42:45

标签: java formatter

 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附加到$?

4 个答案:

答案 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-

看到区别? :)