Java 字符串格式化 —— java.util.Formatter

java.util.Formatter是JDK1.5新增的類,支持相似C中的printf風格的字符串格式化工做html


Formatter有4個構造方法,以下:java

public Formatter()api

public Formatter(Appendable a)oracle

public Formatter(Locale l)ui

public Formatter(Appendable a, Locale l)spa

構造方法主要用於設置Formatter的緩衝器和Locale,默認的狀況下,Formatter使用StringBuilder做爲緩衝器,使用Locale.getDefault()做爲locale。code


Formatter的使用方法以下(摘自JDK DOC):orm

 StringBuilder sb = new StringBuilder();
 // Send all output to the Appendable object sb
 Formatter formatter = new Formatter(sb, Locale.US);

 // Explicit argument indices may be used to re-order output.
 formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
 // -> " d  c  b  a"

 // Optional locale as the first argument can be used to get
 // locale-specific formatting of numbers.  The precision and width can be
 // given to round and align the value.
 formatter.format(Locale.FRANCE, "e = %+10.4f", Math.E);
 // -> "e =    +2,7183"

 // The '(' numeric flag may be used to format negative numbers with
 // parentheses rather than a minus sign.  Group separators are
 // automatically inserted.
 formatter.format("Amount gained or lost since last statement: $ %(,.2f", balanceDelta);
 // -> "Amount gained or lost since last statement: $ (6,217.58)"

例子中,先new一個Formatter對象,而後調用Formatter的format方法,這時Formatter內部的緩衝器就儲存了格式化後的字符串,而後能夠用toString方法取出。htm


更爲通常的用法是使用String.format,String.format經過Formatter實現字條串格式對象

public static String format(String format, Object ... args) {
    return new Formatter().format(format, args).toString();
}


或者在輸出流中使用

System.out.format("Local time: %tT", Calendar.getInstance());


format方法的主要參數分兩部分,格式字符串和可變的格式化參數


格式字符串有一套本身的語法,它由固定文本或者格式描述符組成。描述符的格式以下:

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

argument_index 是一個整數,代表使用的參數的位置,例如

System.out.format("%d %d", 1, 2);        // 輸出 1 2
System.out.format("%1$d %d", 1, 2);      // 輸出 1 1

flags 是一組用於修飾輸出的字條

width 是一個非負的整數,用於指定寫到綏中的最小長度

precision 是一個非負整數,通常用於指定數字的精度,依賴conversion 

conversion 必須有值,用於指定參數如何轉換


conversion  主要有如下幾組字符(便可以轉換的類型)

's''S'             要求參數實現了Formattable,而後調用它的formatTo方法獲得結果

'c''C'        字符

'd'             十進制整數

'o'             八進制整數

'x''X'        十六進制整數

'e''E'        科學計數法浮點數

'f'             浮點數

't''T'        時間日期


flags 主要有如下幾種用法

'-'                            左對齊

'#'                            依賴於conversion,不一樣的conversion,該flag的含義不同

'+'                            結果帶正負號

' '                             結果帶前置空格

'0'                            若是結果不知足寬度(width 參數)的要求,用0字符填充

','                            數字會按locale用逗號分割

'('                            負數結果會被括號括起


更詳細的資料能夠看JDK文檔

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html

相關文章
相關標籤/搜索