Search code examples
javastringformatstring-formatting

What does "%1$#" mean when used in String.format (Java)?


Language is Java. What does the %1$# mean in...

static String padright (String str, int num) {
   return String.format("%1$#" + num + "str", str);
}

In the Java API, String.format() is used in this way:

public static String format(String format, Object... args)

So I think %1$# is a format specifier.

%[flags][width][.precision][argsize]typechar is the template.

  • 1 is a flag?
  • $ is the width?
  • # is the precision?
  • num is the argsize?
  • "str" is the typechar?

Is that right?


Solution

  • Template:

    %[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.

    The optional flags is a set of characters that modify the output format. The set of valid flags depends on the conversion.

    The optional width is a decimal integer indicating the minimum number of characters to be written to the output.

    The optional precision is a non-negative decimal integer usually used to restrict the number of characters. The specific behavior depends on the conversion.

    The required conversion is a character indicating how the argument should be formatted. The set of valid conversions for a given argument depends on the argument's data type.

    %1$ refers to the first substitution. In this case the string str. # is flag which says the result should use a conversion-dependent alternate form.

    http://download.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html