java string.format函数Format标志异常

时间:2019-02-27 11:10:15

标签: java string

运行jar文件时出现以下错误。 它在JDK 1.6中运行,但在JRE 1.8中引发错误。 jar文件在eclipse中运行良好,但是当我导出它时,出现以下错误。

Exception in thread "main" java.lang.reflect.InvocationTargetException
Caused by: java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = #
at java.lang.String.format(Unknown Source)
at GenerateTTUMFile.padRight(GenerateTTUMFile.java:145)
at GenerateTTUMFile.generate_TTUMFile(GenerateTTUMFile.java:119)
at GenerateFilesOutwardCredit.main(GenerateFilesOutwardCredit.java:43)

我正在使用下面提到的功能。

public static String padRight(String s, int n) { 
    return String.format("%1$#" + n + "s", new Object[] { s });
} 

2 个答案:

答案 0 :(得分:1)

#标志可以应用于%o,%x,%e和%f格式说明符,但会为%s

引发异常
  

如果给出了#标志,并且参数不是Formattable,   那么将抛出FormatFlagsConversionMismatchException

摘自java.util.Formatter的文档:

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

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

所以%1$#(n)s意味着对于标志值,您有#s(字符串)的转换。

由于java.lang.String未实现Formattable接口,因此引发了异常。

答案 1 :(得分:0)

public static String padRight(String s, int n) {
    return String.format("%-" + n + 's', s);
}

public static String padLeft(String s, int n) {
    return String.format("%" + n + 's', s);
}

演示

System.out.println("0123456789|");
System.out.print(padRight("abc", 10));
System.out.println('|');
System.out.print(padLeft("abc", 10));
System.out.println('|');

输出

0123456789|
abc       |
       abc|

查看Documentation

中的详细信息