2016-09-24 52 views
0

對於這個代碼如何在格式化整數時使用空格和符號標誌?

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,作爲標誌部分描述,我可以使用+(即空間)和(跡象\標誌如上面的代碼所示來格式化整數。

我的問題是:

  1. 凡指出如何這些標誌互相交流?
  2. 爲什麼space標誌對第三條語句正常工作,但是會爲第四條語句引發異常?
  3. 對於第二條語句,爲什麼(標誌會覆蓋+標誌的效果?爲什麼不是相反呢?

回答

2

javadoc你明確提到說:

如果給出的'+'' '標誌都被那麼IllegalFormatFlagsException將被拋出。

它還列出了以下restrictionm,這並不適用於你的例子:如果給出'-''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 = '+ (' 

正如你所看到的,這是有道理的'+'' '是互斥的。它們都定義瞭如何顯示正數的符號。

相關問題