java中的Amerpsand格式标志

java中的Amerpsand格式标志,java,Java,我有用于格式化字符串的现有java代码。以下格式的代码失败-java.util.FormatFlagsConversionMismatchException:…基于其他SO问题,我认为它与所使用的java版本更相关 问题 “%1$#”格式有什么作用..我在谷歌搜索时,基本上找不到“$”和“#”格式规则 如何解决这个问题 Java代码 String test = String.format("%1$#" + 2 + "s", 01); 从以下文件: 常规、字符和数字类型的格式说明符具有以下语法:

我有用于格式化字符串的现有java代码。以下格式的代码失败-java.util.FormatFlagsConversionMismatchException:…基于其他SO问题,我认为它与所使用的java版本更相关

问题

  • “%1$#”格式有什么作用..我在谷歌搜索时,基本上找不到“$”和“#”格式规则

  • 如何解决这个问题

  • Java代码

    String test = String.format("%1$#" + 2 + "s", 01);
    
    从以下文件:

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

    %[argument_index$][flags][width][.precision]conversion
    
    因此,
    %1$#2s
    表示参数索引为1,标志值为
    (“结果应使用依赖于转换的替代形式”),宽度为2,转换为
    s
    (字符串)

    对于
    %s
    转换,通过将其传递到
    Formattable
    ,使用替代形式:

    如果参数为null,则结果为
    “null”
    。如果参数实现了
    Formattable
    ,则调用其
    formatTo
    方法。否则,将通过调用参数的toString()方法获得结果

    如果给定了“#”标志且参数不是
    Formattable
    ,则将抛出
    FormatFlagsConversionMismatchException


    我怀疑您在这种情况下并不真正想要
    #

    您可以阅读有关格式的内容。代码中的错误是,
    在您的情况下是无效的FormatFlag(#意味着结果应该使用依赖转换的替代形式)。您可以使用,例如,
    s或d
    这样打印

    System.out.println(String.format("%1$d" + 2 + "s", 01));
    

    java.util.Formatter
    javadoc.“符号”从何而来?!!