首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 5.0 格式化輸出全攻略:Formatter、PrintStream 與 Formattable 實戰

     編輯:Java 相關知識

從字符串拼接到格式化字符串的範式轉變

Java 5.0 終於原生支援 C 風格的格式化輸出,告別 firstName + " " + lastName 這類低效拼接。核心在於 java.util.Formatter 類,它依據格式字符串(如 "%1$s %2$s")與參數列表,產出格式化結果。格式化語法兼容 printf 風格,支援精度、寬度、對齊、日期時間、參數索引等豐富特性。

Formatter 核心機制:兩步走

  1. 建立實現 Appendable 的目標對象(StringBuilder、FileWriter、PrintStream 等)。
  2. 調用 format(String format, Object... args) 或帶 Locale 重載,將結果寫入目標。

StringBuilder(非線程安全,單線程首選)與 StringBuffer(線程安全)是最常用目標。範例:

StringBuilder sb = new StringBuilder();
Formatter fmt = new Formatter(sb, Locale.US);
fmt.format("PI = %12.10f", Math.PI);
System.out.println(fmt); // 輸出 Appendable 內容

便捷入口:PrintStream.format/printf 與 String.format

System.out、System.err 皆為 PrintStream,新增 format() 與 printf()(內部委託 format()),直接輸出至控制台:

System.out.format("Today is %1$tB %1$te, %1$tY.", Calendar.getInstance());
// Today is April 2, 2004.

String.format() 則直接返回格式化後的字符串,無需手動構建 Formatter 實例,適合簡單場景。

自定義類型格式化:實現 Formattable 接口

若希望自定義類支援 %s 等格式化規範(寬度、精度、左對齊),需實現 java.util.Formattable 的唯一方法:

void formatTo(Formatter formatter, int flags, Integer width, Integer precision)

範例展示了 MyObject 如何根據 precision 截斷名稱、根據 width 与 Formattable.LEFT_JUSTIFY 標誌填充空格,實現與內建類型一致的格式化行為。

關鍵差異與最佳實踐

  • 格式字符串無效時拋出 IllegalFormatException(C 語言僅產生未定義行為)。
  • 務必查閱 Formatter Javadoc 中的完整格式化語法表(日期/時間轉換符 %tX、參數索引 %n$ 等)。
  • 為重要領域類實現 Formattable,配合 toString(),賦予其優雅的格式化輸出能力。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved