理解Java中的$x27;s格式字符串

理解Java中的$x27;s格式字符串,java,formatter,Java,Formatter,在这种情况下,为什么要将2附加到$ 2$表示将列表中的第二个参数放在这里。$后面是一个不在前面的数字。类似地,4$意味着在这里提出第四个参数 为了澄清,我们可以将%2$2s格式分解为以下几个部分: %-表示这是一个格式字符串 2$-显示第二个值参数应该放在这里 2-格式为两个字符长 s-将值格式化为字符串 您可以找到更多信息。与$无关的2: %=格式字符串的开头 4$=第四个参数('d')) 2=两个的宽度(右对齐) s=字符串类型 这些是位置参数,%4$2s发出信号,将第四个参数格式化为

在这种情况下,为什么要将2附加到$

2$表示将列表中的第二个参数放在这里。
$
后面是一个不在前面的数字。类似地,
4$
意味着在这里提出第四个参数

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

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

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

  • 2
    -格式为两个字符长

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


您可以找到更多信息。

$
无关的
2

  • %
    =格式字符串的开头
  • 4$
    =第四个参数('d'))
  • 2
    =两个的宽度(右对齐)
  • s
    =字符串类型

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

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

 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"
可选的
参数\u索引是一个十进制整数,指示参数在参数列表中的位置。第一个参数由
“1$”
引用,第二个参数由
“2$”
引用,等等-


%
:格式化字符串

4$
:第四个值参数

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

s
:这是一个字符串参数转换

例如,以下代码段:

%[argument_index$][flags][width]conversion
产生以下输出:

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

5
替换为
2
,将产生以下输出:

-    d-    c-    b-    a-

看到区别了吗?:)

尽管如此,我还是更喜欢.NET的格式字符串,因为它们使参数的位置更加清晰。当它是一个错误的答案时,它实际上被否决了。因为现在它是正确的,downvote被删除了。@Sven-答案从未改变,我想你一定是看错了。我添加了内容,但没有更改任何内容。当我否决时,内容是:“2美元意味着将列表中的第二个参数放在这里。”这不是我认为正确的答案。现在它仍然准确地说了这一点,你说它现在是正确的。就其本身而言,它是错误的,或者至少没有回答问题,但放在上下文中,是的,这真的很清楚,谢谢。但是,当我使用%4$2s且参数值为'ABCDEFGH'时,它不会仅检索2个字符。它检索到了完整的字符串。为什么?
- d- c- b- a-