如果在String.format中多次使用相同的参数呢?

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

hellovariables是否需要在格式化方法的调用中重复多次,或者是否有一个简化版本,可以指定参数一次应用于所有%s标记?

从文档 :

  • 通用,字符和数字types的格式说明符具有以下语法:

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

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

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

另一个select是使用相对索引 :格式说明符引用与最后一个格式说明符相同的参数。

例如:

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

结果hello hello hello hello

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" 

为了便于阅读和debugging,添加了空格。 一旦格式看起来是正确的,可以在文本编辑器中删除空格:

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