重用String.format中的参数?


136
String hello = "Hello";

String.format("%s %s %s %s %s %s", hello, hello, hello, hello, hello, hello);

hello hello hello hello hello hello 

hello变量是否需要在对format方法的调用中重复多次,还是有一个速记版本可以让您一次指定要应用于所有%s标记的参数?

Answers:


261

文档

  • 常规,字符和数字类型的格式说明符具有以下语法:

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

    可选的arguments_index是一个十进制整数,指示参数在参数列表中的位置。第一个参数由引用"1$",第二个参数由"2$"等等。

String.format("%1$s %1$s %1$s %1$s %1$s %1$s", hello);


12

您需要使用%[argument_index$]以下用户索引参数:

String hello = "Hello";
String.format("%1$s %1$s %1$s %1$s %1$s %1$s", hello);

结果: hello hello hello hello hello hello


4

重用参数的一种常见情况String.format是使用分隔符(例如";"CSV或控制台的制表符)。

System.out.println(String.format("%s %2$s %s %2$s %s %n", "a", ";", "b", "c"));
// "a ; ; ; b"

这不是所需的输出。"c"没有出现在任何地方。

您需要首先使用分隔符(带有%s),并且仅%2$s在以下情况下使用参数索引():

System.out.println(String.format("%s %s %s %2$s %s %n", "a", ";", "b", "c"));
//  "a ; b ; c"

添加了用于可读性和调试的空间。格式正确后,可以在文本编辑器中删除空格:

System.out.println(String.format("%s%s%s%2$s%s%n", "a", ";", "b", "c"));
// "a;b;c"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.