JAVA Formatter類

1、java.util.Formatter
 
java.util.Formatter 是JDK1.5新增的類庫,功能很強大,可是很差掌握。 格式化主要用在文本輸出方面,好比,數字、日期、金額等,還有相似超市的購物單小票等等,都會用到格式化輸出的工具。
 

給定規則:html

  要想按照本身的想法格式化必須事先編寫一個規則。那這個規則要怎麼編寫?java

1.常規類型、字符類型和數值類型的格式說明符的語法以下:正則表達式

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

2.用來表示日期和時間類型的格式說明符的語法以下:編碼

   %[argument_index$][flags][width]conversionspa

3.與參數不對應的格式說明符的語法以下:.net

  %[flags][width]conversioncode

API中有這樣三種規則,很顯然第一個規則的內容是最全面的。其它規則的內容和第一規則的內容有重複,那單說第一規則內容,其它規則依次類推。orm

注意:規則一中的precision前面要加英文句號「.htm

 

API有如下解釋:

可選的 argument_index 是一個十進制整數,用於代表參數在參數列表中的位置。第一個參數由 "1$" 引用,第二個參數由 "2$" 引用,依此類推。

可選 flags 是修改輸出格式的字符集。有效標誌集取決於轉換類型。

可選 width 是一個非負十進制整數,代表要向輸出中寫入的最少字符數。

可選 precision 是一個非負十進制整數,一般用來限制字符數。特定行爲取決於轉換類型。

所需 conversion 是一個代表應該如何格式化參數的字符。給定參數的有效轉換集取決於參數的數據類型。

 

argument_index很好理解,就是一參數佔位符,用來表示要被格式化的參數。

 

flags 

 

 

標誌

常規

字符

整數

浮點

日期/時間

說明

'-'

y

y

y

y

y

結果將是左對齊的。

'#'

y1

-

y3

y

-

結果應該使用依賴於轉換類型的替換形式

'+'

-

-

y4

y

-

結果老是包括一個符號

' '

-

-

y4

y

-

對於正值,結果中將包括一個前導空格

'0'

-

-

y

y

-

結果將用零來填充

','

-

-

y2

y5

-

結果將包括特定於語言環境的組分隔符

'('

-

-

y4

y5

-

結果將是用圓括號括起來的負數

1 取決於 Formattable 的定義。

2 只適用於 'd' 轉換。

3 只適用於 'o''x' 和 'X' 轉換。

4 對 BigInteger 應用 'd''o''x' 和 'X' 轉換時,或者對 byte 及 Byte、short 及 Short、int 及 Integer、long 及 Long 分別應用 'd' 轉換時適用。

5 只適用於 'e''E''f''g' 和 'G' 轉換。

任何未顯式定義爲標誌的字符都是非法字符,而且都被保留,以供擴展使用。



width 就表示一最少字符數,被格式化參數用precision 截取器截取後與width 相比,被格式化參數字符數若是小於width ,則加字符則到等於width 。若是大於則width 不起做用。因此能夠叫width 爲少加多過器。

 

precision 在上面也提到了,precision 是一個截取器,用於截取被格式化參數。

 

conversion 轉換可分爲如下幾類:

 常規可應用於任何參數類型

 字符可應用於表示 Unicode 字符的基本類型:charCharacter、byteByte、short 和 Short。當 Character.isValidCodePoint(int) 返回 true 時,可將此轉換應用於 int 和 Integer 類型

數值

整數可應用於 Java 的整數類型:byteByte、shortShort、intInteger、longLong 和 BigInteger

浮點可用於 Java 的浮點類型:floatFloat、doubleDouble 和 BigDecimal

 日期/時間可應用於 Java 的、可以對日期或時間進行編碼的類型:longLongCalendar 和 Date

 百分比產生字面值 '%' ('\u0025')

 行分隔符產生特定於平臺的行分隔符

 

常規

B b

若是參數 arg 爲 null,則結果爲 "false"。若是 arg 是一個 boolean 值或Boolean,則結果爲 String.valueOf() 返回的字符串。不然結果爲 "true"

h

若是參數 arg 爲 null,則結果爲 "null"。不然,結果爲調用Integer.toHexString(arg.hashCode()) 獲得的結果。

S s

若是參數 arg 爲 null,則結果爲 "null"。若是 arg 實現 Formattable,則調用arg.formatTo。不然,結果爲調用 arg.toString() 獲得的結果。

字符

C c

結果是一個 Unicode 字符

整數

d

結果被格式化爲十進制整數

o

結果被格式化爲八進制整數

X x

結果被格式化爲十六進制整數

浮點

E e

結果被格式化爲用計算機科學記數法表示的十進制數

f

結果被格式化爲十進制數

G g

根據精度和舍入運算後的值,使用計算機科學記數形式或十進制格式對結果進行格式化。

A a

結果被格式化爲帶有效位數和指數的十六進制浮點數

日期,日間

T t

日期和時間轉換字符的前綴

百分比

%

結果爲字面值 '%'

行分隔符

n

結果爲特定於平臺的行分隔符

 

 

 

常出現的異常

 

java.util.IllegalFormatConversionException: d != java.lang.Double : 被格式化參數類型與規則轉換類型不對應。

 

java.util.FormatFlagsConversionMismatchException: Conversion = d, Flags = #  : flag不適用於規則轉換類型。

 

 

Formatter類是用正則表達式驗證給定規則的

 

正則表達式以下:

 private static final String formatSpecifier

=

  "%(\\d+\\$)?([-#+0,(\\<]*)?(\\d+)?(\\.\\d+)?([tT])?([a-zA-Z%])";

 

 

   總結:

  •    最重要的是它能夠格式化日期/時間,數值和字符。
  •    能夠把日期轉換成年,月,日,星期等。能夠爲數值填充空格或0,添加分組字符,正負號,及小括號。 咱們能夠在System.out.format    (),String.format()方法中直接應用Formatter類。
相關文章
相關標籤/搜索