在String.format中重用参数?

时间:2011-07-31 17:48:05

标签: java string string-formatting

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标记的参数?

4 个答案:

答案 0 :(得分:225)

来自the docs

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

        %[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);

答案 1 :(得分:43)

另一个选择是使用 relative indexing :格式说明符引用与最后一个格式说明符相同的参数。

例如:

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

结果为hello hello hello hello

答案 2 :(得分:8)

您需要使用以下参数来索引参数2 * abs(a.b)/(a**2 + b**2)

%[argument_index$]

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

答案 3 :(得分: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"