在String.format()中选择参数

时间:2015-05-07 10:55:53

标签: java formatting

C#中,您可以使用para 2: {2}指定用于格式化字符串的参数。这允许在任意位置和多次使用参数。

有没有办法用标准java做到这一点?

3 个答案:

答案 0 :(得分:8)

是。您可以定义参数的索引,请参阅API参数索引部分。

例如:

//                 ┌ argument 3 (1-indexed)
//                 | ┌ type of String
//                 | |  ┌ argument 2
//                 | |  | ┌ type of decimal integer
//                 | |  | |  ┌ argument 1
//                 | |  | |  | ┌ type of decimal number (float)
//                 | |  | |  | |
System.out.printf("%3$s %2$d %1$f", 1.5f, 42, "foo");

<强>输出

foo 42 1.500000

注意

以下习语共享相同的格式定义:

  • String#format
  • PrintStream#printf
  • Formatter#format

答案 1 :(得分:1)

是。从https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html#syntax我们可以看到占位符的通用公式是

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

我们对这部分感兴趣

%[argument_index$][flags][width][.precision]conversion
 ^^^^^^^^^^^^^^^^^ 

因此,您可以将x$添加到占位符,其中x表示参数编号(从1索引),例如

String.format("%2$s %1$s", "foo", "bar"); //returns `"bar foo"`
//              ^^   ^^     ^^^    ^^^
//               |    +-----+      |
//               |                 |
//               +-----------------+

顺便说一句:如果你想使用像{x}这样的格式,只需使用MessageFormat.format

MessageFormat.format("{1} {0}", "foo", "bar")

答案 2 :(得分:1)

我认为您正在搜索String.format()

  

使用指定的格式字符串和参数返回格式化字符串。

使用:

padding