java字符串格式化
尋找將數(shù)字轉(zhuǎn)化為定長字符串的方法,最終發(fā)現(xiàn)用String類的Format可以實現(xiàn)
示例:
int id = 0;
String id2 = String .format("%010d", id); //前導(dǎo)置零,10位長度的字符串
函數(shù)原型:
format
public static String format(String format,
Object... args)
使用指定的格式字符串和參數(shù)返回一個格式化字符串。
始終使用 Locale.getDefault() 返回的語言環(huán)境。
參數(shù):
format - 格式字符串
args - 格式字符串中由格式說明符引用的參數(shù)。如果還有格式說明符以外的參數(shù),則忽略這些額外的參數(shù)。參數(shù)的數(shù)目是可變的,可以為 0。參數(shù)的最大數(shù)目受 Java Virtual Machine Specification 所定義的 Java 數(shù)組最大維度的限制。有關(guān) null 參數(shù)的行為依賴于轉(zhuǎn)換。
返回:
一個格式化字符串
拋出:
IllegalFormatException - 如果格式字符串中包含非法語法、與給定的參數(shù)不兼容的格式說明符,格式字符串給定的參數(shù)不夠,或者存在其他非法條件。有關(guān)所有可能的格式化錯誤的規(guī)范,請參閱 formatter 類規(guī)范的詳細(xì)信息 一節(jié)。
NullPointerException - 如果 format 為 null
1、常規(guī)類型、字符類型和數(shù)值類型的格式說明符的語法如下:
%[argument_index$][flags][width][.precision]conversion
*可選的 argument_index 是一個十進(jìn)制整數(shù),用于表明參數(shù)在參數(shù)列表中的位置。第一個參數(shù)由 "1$" 引用,第二個參數(shù)由 "2$" 引用,依此類推。
*可選 flags 是修改輸出格式的字符集。有效標(biāo)志集取決于轉(zhuǎn)換類型。
*可選 width 是一個非負(fù)十進(jìn)制整數(shù),表明要向輸出中寫入的最少字符數(shù)。
*可選 precision 是一個非負(fù)十進(jìn)制整數(shù),通常用來限制字符數(shù)。特定行為取決于轉(zhuǎn)換類型。
*所需 conversion 是一個表明應(yīng)該如何格式化參數(shù)的字符。給定參數(shù)的有效轉(zhuǎn)換集取決于參數(shù)的數(shù)據(jù)類型。
2、用來表示日期和時間類型
%[argument_index$][flags][width]conversion
*可選的 argument_index、flags 和 width 的定義同上。
*所需的 conversion 是一個由兩字符組成的序列。第一個字符是 't' 或 'T'。第二個字符表明所使用的格式。這些字符類似于但不完全等同于那些由 GNU date 和 POSIX strftime(3c) 定義的字符。
3、與參數(shù)不對應(yīng)的格式說明符的語法如下:
%[flags][width]conversion
可選 flags 和 width 的定義同上。
所需的 conversion 是一個表明要在輸出中所插內(nèi)容的字符。
二、語法中個元素對應(yīng)的參數(shù)
1、標(biāo)志(flags)
下表總結(jié)了受支持的標(biāo)志。y 表示該標(biāo)志受指示參數(shù)類型支持。
標(biāo)志 | 常規(guī) | 字符 | 整數(shù) | 浮點 | 日期/時間 | 說明 |
---|---|---|---|---|---|---|
'-' | y | y | y | y | y | 結(jié)果將是左對齊的。 |
'#' | y1 | - | y3 | y | - | 結(jié)果應(yīng)該使用依賴于轉(zhuǎn)換類型的替換形式 |
'+' | - | - | y4 | y | - | 結(jié)果總是包括一個符號 |
' ' | - | - | y4 | y | - | 對于正值,結(jié)果中將包括一個前導(dǎo)空格 |
'0' | - | - | y | y | - | 結(jié)果將用零來填充 |
',' | - | - | y2 | y5 | - | 結(jié)果將包括特定于語言環(huán)境的組分隔符 |
'(' | - | - | y4 | y5 | - | 結(jié)果將是用圓括號括起來的負(fù)數(shù) |
1 取決于 Formattable
的定義。
2 只適用于 'd' 轉(zhuǎn)換。
3 只適用于 'o'、'x' 和 'X' 轉(zhuǎn)換。
4 對 BigInteger
應(yīng)用 'd'、'o'、'x' 和 'X' 轉(zhuǎn)換時,或者對 byte 及 Byte
、short 及 Short
、int 及 Integer
、long 及 Long
分別應(yīng)用 'd' 轉(zhuǎn)換時適用。
5 只適用于 'e'、'E'、'f'、'g' 和 'G' 轉(zhuǎn)換。
任何未顯式定義為標(biāo)志的字符都是非法字符,并且都被保留,以供擴(kuò)展使用。
**String id2 = String .format("%010d", id); 其中引號內(nèi)第一個0便是用零填充,
2、寬度(width)
寬度是將向輸出中寫入的最少字符數(shù)。對于行分隔符轉(zhuǎn)換,不適用寬度,如果提供寬度,則會拋出異常。
3、精度(precision)
對于常規(guī)參數(shù)類型,精度是將向輸出中寫入的最多字符數(shù)。
對于浮點轉(zhuǎn)換 'e'、'E' 和 'f',精度是小數(shù)點分隔符后的位數(shù)。如果轉(zhuǎn)換是 'g' 或 'G',那么精度是舍入計算后所得數(shù)值的所有位數(shù)。如果轉(zhuǎn)換是 'a' 或 'A',則不必指定精度。
對于字符、整數(shù)和日期/時間參數(shù)類型轉(zhuǎn)換,以及百分比和行分隔符轉(zhuǎn)換,精度是不適用的;如果提供精度,則會拋出異常。
4、轉(zhuǎn)換(conversion)
下表總結(jié)了受支持的轉(zhuǎn)換。由大寫字符(如 'B'、'H'、'S'、'C'、'X'、'E'、'G'、'A' 和 'T')表示的轉(zhuǎn)換與由相應(yīng)的小寫字符的轉(zhuǎn)換等同,根據(jù)流行的 Locale
規(guī)則將結(jié)果轉(zhuǎn)換為大寫形式除外。后者等同于 String.toUpperCase()
的以下調(diào)用
out.toUpperCase()
轉(zhuǎn)換 | 參數(shù)類別 | 說明 |
---|---|---|
'b', 'B' | 常規(guī) | 如果參數(shù) arg 為 null,則結(jié)果為 "false"。如果 arg 是一個 boolean 值或 Boolean ,則結(jié)果為 String.valueOf() 返回的字符串。否則結(jié)果為 "true"。
|
'h', 'H' | 常規(guī) | 如果參數(shù) arg 為 null,則結(jié)果為 "null"。否則,結(jié)果為調(diào)用 Integer.toHexString(arg.hashCode()) 得到的結(jié)果。 |
's', 'S' | 常規(guī) | 如果參數(shù) arg 為 null,則結(jié)果為 "null"。如果 arg 實現(xiàn) Formattable ,則調(diào)用 arg.formatTo 。否則,結(jié)果為調(diào)用 arg.toString() 得到的結(jié)果。
|
'c', 'C' | 字符 | 結(jié)果是一個 Unicode 字符 |
'd' | 整數(shù) | 結(jié)果被格式化為十進(jìn)制整數(shù) |
'o' | 整數(shù) | 結(jié)果被格式化為八進(jìn)制整數(shù) |
'x', 'X' | 整數(shù) | 結(jié)果被格式化為十六進(jìn)制整數(shù) |
'e', 'E' | 浮點 | 結(jié)果被格式化為用計算機(jī)科學(xué)記數(shù)法表示的十進(jìn)制數(shù) |
'f' | 浮點 | 結(jié)果被格式化為十進(jìn)制數(shù) |
'g', 'G' | 浮點 | 根據(jù)精度和舍入運算后的值,使用計算機(jī)科學(xué)記數(shù)形式或十進(jìn)制格式對結(jié)果進(jìn)行格式化。 |
'a', 'A' | 浮點 | 結(jié)果被格式化為帶有效位數(shù)和指數(shù)的十六進(jìn)制浮點數(shù) |
't', 'T' | 日期/時間 | 日期和時間轉(zhuǎn)換字符的前綴。請參閱日期/時間轉(zhuǎn)換。 |
'%' | 百分比 | 結(jié)果為字面值 '%' ('\u0025') |
'n' | 行分隔符 | 結(jié)果為特定于平臺的行分隔符 |
任何未明確定義為轉(zhuǎn)換的字符都是非法字符,并且都被保留,以供將來擴(kuò)展使用
此外還有日期格式的轉(zhuǎn)換,在此不列出。
(以上來源于JDK1.6)
posted @ 2010-08-19 16:35 xyan 閱讀(5693) | 評論 (0) | 編輯 收藏