对于此代码
public static void main(String[] args) {
System.out.println(String.format("%+(d", 14));
System.out.println(String.format("%+(d", -14));
System.out.println(String.format("% (d", 14));
System.out.println(String.format("%+ (d", -14));
}
输出
+14
(14)
14
[An exception is thrown]
根据this page,正如标志部分所述,我可以使用+
,(即空格)和
(
标志\ flags用于格式化整数,如上面的代码所示。
我的问题是:
space
标志适用于第3个语句但是会引发第4个异常?(
标志会覆盖+
标志的效果?为什么反过来呢?答案 0 :(得分:2)
您引用的javadoc明确说明:
如果同时提供
'+'
和' '
标记,则会抛出IllegalFormatFlagsException
。
它还列出了以下限制,它不适用于您的示例:
如果同时提供
'-'
和'0'
标记,则会抛出IllegalFormatFlagsException
。
如果你想看到各种标志的效果,这里有一个小测试程序:
public static void main(String[] args) {
test("%d");
test("%+d");
test("% d");
test("%(d");
test("%+ d");
test("%+(d");
test("% (d");
test("%+ (d");
}
private static void test(String fmt) {
try {
System.out.printf("%5s: '" + fmt + "'%n", fmt, 14);
System.out.printf("%5s: '" + fmt + "'%n", fmt, -14);
} catch (Exception e) {
System.out.printf("%5s: %s%n", fmt, e);
}
}
输出
%d: '14'
%d: '-14'
%+d: '+14'
%+d: '-14'
% d: ' 14'
% d: '-14'
%(d: '14'
%(d: '(14)'
%+ d: java.util.IllegalFormatFlagsException: Flags = '+ '
%+(d: '+14'
%+(d: '(14)'
% (d: ' 14'
% (d: '(14)'
%+ (d: java.util.IllegalFormatFlagsException: Flags = '+ ('
正如您所看到的,'+'
和' '
相互排斥是有道理的。它们都定义了如何显示正数的符号。