Reuse a parameter in String.format?

前端 未结 4 840
南笙
南笙 2020-12-07 11:14
String hello = \"Hello\";

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

hello hello hello hello hello hello 

Do

相关标签:
4条回答
  • 2020-12-07 11:25

    One common case for reusing an argument in String.format is with a separator (e.g. ";" for CSV or tab for console).

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

    This isn't the desired output. "c" doesn't appear anywhere.

    You need to use the separator first (with %s) and only use the argument index (%2$s) for the following occurences :

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

    Spaces are added for readability and debugging. Once the format appears to be correct, spaces can be removed in the text editor:

    System.out.println(String.format("%s%s%s%2$s%s%n", "a", ";", "b", "c"));
    // "a;b;c"
    
    0 讨论(0)
  • 2020-12-07 11:26

    You need to user index argument %[argument_index$] as the following :

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

    Result : hello hello hello hello hello hello

    0 讨论(0)
  • 2020-12-07 11:30

    Another option is to use relative indexing: The format specifier references the same argument as the last format specifier.

    For example:

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

    results in hello hello hello hello.

    0 讨论(0)
  • 2020-12-07 11:48

    From the docs:

    • The format specifiers for general, character, and numeric types have the following syntax:

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

      The optional argument_index is a decimal integer indicating the position of the argument in the argument list. The first argument is referenced by "1$", the second by "2$", etc.

    String.format("%1$s %1$s %1$s %1$s %1$s %1$s", hello);
    
    0 讨论(0)
提交回复
热议问题