90
 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

4 回答 4

143

2无关$

  • %     = 格式字符串的开始
  • 4$   =第四个参数('d')
  • 2     = 两个的宽度(右对齐)
  • s     = 字符串类型
于 2009-12-16T14:47:03.750 回答
49

2$意思是把列表中的第二个参数放在这里。$ 后面是一个数字而不是它前面。同样,4$意味着在这里提出第四个论点。

为了澄清,我们可以将%2$2s格式分解成几个部分:

  • %- 表示这是一个格式字符串

  • 2$- 显示第二个值参数应该放在这里

  • 2- 格式为两个字符长

  • s- 将值格式化为字符串

您可以在文档中找到更多信息。

于 2009-12-16T14:46:38.477 回答
4

这些是位置参数,其中%4$2s信号将第四个参数格式化为宽度为 2 的字符串。这在为本地化提供字符串时特别有用,其中参数需要在不接触源代码的情况下重新排序。

用于表示日期和时间的类型的格式说明符具有以下语法:

%[argument_index$][flags][width]conversion

可选argument_index参数是一个十进制整数,指示参数在参数列表中的位置。第一个参数由 引用"1$",第二个由引用,"2$"依此类推 —<a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html" rel=" nofollow noreferrer">格式化程序文档

于 2009-12-16T14:47:35.313 回答
4

%: 格式字符串

4$: 第四个值参数

2: 宽度(打印参数时的长度)

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 个字符的宽度,用空格填充)

并替换52, 将产生以下输出:

- d- c- b- a-

看到不同?:)

于 2013-04-29T09:22:03.863 回答