2016-02-29 51 views
0

我正在實現類內的Formattable接口的formatTo()方法。然後我現在用它的printf()參數,如下所示:Java可格式化接口和printf參數

public static void main(String[] args) 
{ 
     BankAccount1 bankAccount = new BankAccount1(1234.12) ; 

     //Don't understand this code 
     System.out.printf("%s %10S.\n", "Balance = ", bankAccount) ; 
} 
class BankAccount implements Formattable 
{ 

    public void formatTo(Formatter formatter, int flags, int width, int precision) 
    { 

     Appendable appendable = formatter.out() ; 
     String balanceString = "" + balance ; 


     for (int i = balanceString.length() ; i < width ; i++) 
     balanceString = "$" + balanceString ; 

     try { 

      //tells appendable to append balanceString to printf's string 
      appendable.append(balanceString) ; 

     } 
     catch (IOException e) { 
      System.exit(0) ; 
     } 

    } 
} 

,輸出是:

Balance = $$$1234.12. 

我的問題是,上線:

System.out.printf("%s %10S.\n", "Balance = ", bankAccount) ; 

我知道%s用於字符串,但是什麼是「%10S。\ n」呢?此外,在「%10S。\ n」爲什麼「%10S」爲什麼資本S,它代表什麼?

+0

你寫了這段代碼吧?爲什麼你**使用大寫字母'S'而不是小寫char?你也不應該在'printf'中使用'/ n',而應該使用與平臺無關的'%n'。 –

+0

不,不是我的代碼。 –

回答

1

這裏,BankAccount Class有農具Formattable interface

現在,

的printf

語法看起來同樣,

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

現在,讓我解釋一下吧,

%10意味着總數爲01輸出的將10 (in java, string length = 10)

現在S或S手段,

如果參數arg爲null,則結果爲 「空」。如果參數 實現了Formattable,則調用arg.formatTo。否則,通過調用arg.toString()獲得 結果。

和由.最後端,這將反映到由輸出(點)

所以最後,輸出:$$$1234.12. 10長度($$$1234.12)與點結束。

在這裏,有趣的是S - 將調用BankAccount的formatTo,正如我上面提到的。