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