格式化整数时如何使用空格和符号标志?

时间:2016-09-24 22:04:55

标签: java formatting

对于此代码

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用于格式化整数,如上面的代码所示。

我的问题是:

  1. 说明这些标志如何相互作用?
  2. 为什么space标志适用于第3个语句但是会引发第4个异常?
  3. 对于第二个语句,为什么(标志会覆盖+标志的效果?为什么反过来呢?

1 个答案:

答案 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 = '+ ('

正如您所看到的,'+'' '相互排斥是有道理的。它们都定义了如何显示正数的符号。

相关问题