System.out.printf 方法抛出标志异常
System.out.printf method throws a flags exception
我正在阅读 Formatter.format
和 System.out.printf
方法 (Java 6) 的文档,并且正在尝试练习所学知识。
我遇到了一个在我看来不合理的例外,或者对主题的理解有问题。
我写的代码很简单:
final int i = -15;
System.out.printf("%1$-+06d", i);
我期望的是 int 按以下格式打印
1) pad to left ; -
2) view the sign (négatif or positif); +
3) complete with left zeros; 0
4) print on 6 columns (characters); 6
反而抛出异常,不知为何:
Exception in thread "main" java.util.IllegalFormatFlagsException: Flags = '-+0'
at java.util.Formatter$FormatSpecifier.checkNumeric(Formatter.java:2935)
at java.util.Formatter$FormatSpecifier.checkInteger(Formatter.java:2890)
at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2643)
at java.util.Formatter.parse(Formatter.java:2480)
at java.util.Formatter.format(Formatter.java:2414)
at java.io.PrintStream.format(PrintStream.java:920)
at java.io.PrintStream.printf(PrintStream.java:821)
at cert.simo.formats.Test.main(Test.java:18)
有什么解释吗?谢谢。
“-”和“0”是不兼容的选项。您要么用零填充,要么向左对齐。下面是导致此异常的 java 6 源代码 (v6-b14) 的一部分。
if ((f.contains(Flags.PLUS) && f.contains(Flags.LEADING_SPACE))
|| (f.contains(Flags.LEFT_JUSTIFY) && f.contains(Flags.ZERO_PAD)))
throw new IllegalFormatFlagsException(f.toString());
我正在阅读 Formatter.format
和 System.out.printf
方法 (Java 6) 的文档,并且正在尝试练习所学知识。
我遇到了一个在我看来不合理的例外,或者对主题的理解有问题。
我写的代码很简单:
final int i = -15;
System.out.printf("%1$-+06d", i);
我期望的是 int 按以下格式打印
1) pad to left ; -
2) view the sign (négatif or positif); +
3) complete with left zeros; 0
4) print on 6 columns (characters); 6
反而抛出异常,不知为何:
Exception in thread "main" java.util.IllegalFormatFlagsException: Flags = '-+0'
at java.util.Formatter$FormatSpecifier.checkNumeric(Formatter.java:2935)
at java.util.Formatter$FormatSpecifier.checkInteger(Formatter.java:2890)
at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2643)
at java.util.Formatter.parse(Formatter.java:2480)
at java.util.Formatter.format(Formatter.java:2414)
at java.io.PrintStream.format(PrintStream.java:920)
at java.io.PrintStream.printf(PrintStream.java:821)
at cert.simo.formats.Test.main(Test.java:18)
有什么解释吗?谢谢。
“-”和“0”是不兼容的选项。您要么用零填充,要么向左对齐。下面是导致此异常的 java 6 源代码 (v6-b14) 的一部分。
if ((f.contains(Flags.PLUS) && f.contains(Flags.LEADING_SPACE))
|| (f.contains(Flags.LEFT_JUSTIFY) && f.contains(Flags.ZERO_PAD)))
throw new IllegalFormatFlagsException(f.toString());