%[argument_index$][flags][width][.precision]conversion
%:表示需要進行格式化
[argument_index$]:
[flag]:默認右對齊,“-”表示左對齊
[width]:寬度
[.precision]:如果是字符串,表示打印輸出的最大位數;如果作用於浮點數,則表示打印輸出的小數點後的位數
conversion:s:字符串 d:數字 f:浮點數 (和c語言有些相似)
最常見的應用是控制一個域的最小尺寸,這可以通過指定width來實現。Formatter對象通過在必要時添加空格,來確保一個域至少達到某個長度。在默認的情況下,數據是右對齊,不過可以使用“-”標誌來改變其對齊方向。
與width相對的是precision,它用來指明最大尺寸。width可以應用於各種類型的數據轉換,並且其行爲方式都一樣。precision則不然,不是所有類型的數據都能使用precision,而且,應用於不同類型的數據轉換時,precision的意義也不同。在將precision應用於String時,它表示打印String時輸出字符的最大數量。而在將precision應用於浮點數時,它表示小數部分要顯示出來的位數(默認是6位小數),如果小數位過多則舍入,太少則在尾部補零。由於整數沒有小數部分,所以precision無法應用於整數,如果你對整數應用precision,則會觸發異常。
下面的程序應用格式修飾符來打印一個購物收據:
- import java.util.Formatter;
- /** %[argument_index$][flags][width][.precision]conversion */
- public class StringFormatUtils {
- private double total=0;
- private Formatter f=new Formatter(System.out);
- public void printTitle(){
- f.format("%-15s %5s %10s\n", "Items","Qty","Price");
- f.format("%-15s %5s %10s\n", "-----","---","-----");
- }
- public void print(String name,int qty,double price){
- f.format("%-15.15s %5d %10.2f\n", name,qty,price);
- total+=price;
- }
- public void printTotal(){
- f.format("%-15s %5s %10.2f\n", "Tax","",total*0.06);
- f.format("%-15s %5s %10s\n", "","","-----");
- f.format("%-15s %5s %10.2f\n", "Total","",total*1.06);
- }
- public static void main(String[] args){
- StringFormatUtils stringFormatUtils=new StringFormatUtils();
- stringFormatUtils.printTitle();
- stringFormatUtils.print("Jack Maic Beans", 4, 4.25);
- stringFormatUtils.print("Princess Peas", 3, 5.1);
- stringFormatUtils.print("Three Bears Porridge", 1,14.29);
- stringFormatUtils.printTotal();
- }
- }
- 輸出結果:
----- --- -----
Jack Maic Beans 4 4.25
Princess Peas 3 5.10
Three Bears Por 1 14.29
Tax 1.42
-----
Total 25.06
格式化字符串,