JavaTM 2 Platform
Standard Ed. 6

java.util
類別 Formatter

java.lang.Object
  繼承者 java.util.Formatter
所有已實作的介面:
Closeable, Flushable

public final class Formatter
extends Object
implements Closeable, Flushable

printf 樣式的格式字元串的解釋程序。此類別提供了對佈局對齊和排列的支持,以及對數值、字元串和日期/時間資料的常規格式和特定於語言環境的輸出的支持。支持諸如 byteBigDecimalCalendar 等常見 Java 型別。任意使用者型別的受限格式化定制都是通過 Formattable 介面提供的。

Formatter 對於多執行緒存取而言沒必要是安全的。執行緒安全是可選的,它對此類別中的方法使用者負責。

Java 語言的格式化輸出在很大程度上受到 C 語言 printf 的啟發。雖然一些格式字元串與 C 類似,但已進行了某些定制,以適應 Java 語言,並且利用了其中一些特性。此外,Java 的格式比 C 的格式更嚴格;例如,如果轉換與標誌不相容,則會拋出異常。在 C 中,不適用的標誌會被忽略。這樣,便於 C 開發人員識別這些格式字元串,而又不必與 C 中的那些標誌完全相容。

所期望用法的範例:

   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)"
 

常見格式化請求的便捷方法是按照如下調用格式來闡明的:

   // Writes a formatted string to System.out.
   System.out.format("Local time: %tT", Calendar.getInstance());
   // -> "Local time: 13:34:18"

   // Writes formatted output to System.err.
   System.err.printf("Unable to open file '%1$s': %2$s",
                     fileName, exception.getMessage());
   // -> "Unable to open file 'food': No such file or directory"
 

與 C 語言的 sprintf(3) 類似,可以使用靜態方法 String#format(String,Object...)String.format 來格式化 Strings:

   // Format a string containing a date.
   import java.util.Calendar;
   import java.util.GregorianCalendar;
   import static java.util.Calendar.*;

   Calendar c = new GregorianCalendar(1995, MAY, 23);
   String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);
   // -> s == "Duke's Birthday: May 23, 1995"
 

結構

此規範分為兩部分。第一部分是摘要,包括基本的格式概念。這一部分是為那些想要快速入門並熟悉其他程式語言的格式化輸出的使用者準備的。第二部分是詳細資訊,包括具體的實作細節。它是為那些需要更精確格式化行為規範的使用者準備的。

摘要

這一部分將提供對格式概念的簡單概觀。有關精確的行為細節,請參閱詳細資訊部分。

格式字元串語法

產生格式化輸出的每個方法都需要格式字元串參數列表。格式字元串是一個 String,它可以包含固定文本以及一個或多個嵌入的格式說明符。請考慮以下範例:

   Calendar c = ...;
   String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);
 
此格式字元串是 format 方法的第一個參數。它包含三個格式說明符 "%1$tm"、"%1$te" 和 "%1$tY",它們指出應該如何處理參數以及在文本的什麼地方插入它們。格式字元串的其餘部分是包括 "Dukes Birthday: " 和其他任何空格或標點符號的固定文本。 參數列表由傳遞給位於格式字元串之後的方法的所有參陣列成。在上述範例中,參數列表的大小為 1,由物件 Calendar c 組成。

轉換

轉換可分為以下幾類別:

  1. 常規 - 可應用於任何參數型別
  2. 字元 - 可應用於表示 Unicode 字元的基本型別:charCharacterbyteByteshortShort。當 Character.isValidCodePoint(int) 返回 true 時,可將此轉換應用於 intInteger 型別
  3. 數值
    1. 整數 - 可應用於 Java 的整數型別:byteByteshortShortintIntegerlongLongBigInteger
    2. 浮點 - 可用於 Java 的浮點型別:floatFloatdoubleDoubleBigDecimal
  4. 日期/時間 - 可應用於 Java 的、能夠對日期或時間進行編碼的型別:longLongCalendarDate
  5. 百分比 - 產生文字值 '%' ('\u0025')
  6. 行分隔符 - 產生特定於平臺的行分隔符

下表總結了受支持的轉換。由大寫字元(如 'B''H''S''C''X''E''G''A''T')表示的轉換與由相應的小寫字元的轉換等同,根據串流行的 Locale 規則將結果轉換為大寫形式除外。後者等同於 String.toUpperCase() 的以下調用

    out.toUpperCase() 
轉換 參數類別別 說明
'b', 'B' 常規 如果參數 argnull,則結果為 "false"。如果 arg 是一個 boolean 值或 Boolean,則結果為 String.valueOf() 返回的字元串。否則結果為 "true"。
'h', 'H' 常規 如果參數 argnull,則結果為 "null"。否則,結果為調用 Integer.toHexString(arg.hashCode()) 得到的結果。
's', 'S' 常規 如果參數 argnull,則結果為 "null"。如果 arg 實作 Formattable,則調用 arg.formatTo。否則,結果為調用 arg.toString() 得到的結果。
'c', 'C' 字元 結果是一個 Unicode 字元
'd' 整數 結果被格式化為十進制整數
'o' 整數 結果被格式化為八進制整數
'x', 'X' 整數 結果被格式化為十六進制整數
'e', 'E' 浮點 結果被格式化為用電腦科學記數法表示的十進制數
'f' 浮點 結果被格式化為十進制數
'g', 'G' 浮點 根據精度和捨入運算後的值,使用電腦科學記數形式或十進制格式對結果進行格式化。
'a', 'A' 浮點 結果被格式化為帶有效位數和指數的十六進制浮點數
't', 'T' 日期/時間 日期和時間轉換字元的前綴。請參閱日期/時間轉換
'%' 百分比 結果為文字值 '%' ('\u0025')
'n' 行分隔符 結果為特定於平臺的行分隔符

任何未明確定義為轉換的字元都是非法字元,並且都被保留,以供將來擴展使用。

日期/時間轉換

以下日期和時間轉換的後綴字元是為 't''T' 轉換定義的。這些型別相似於但不完全等同於那些由 GNU date 和 POSIX strftime(3c) 定義的型別。提供其他轉換型別是為了存取特定於 Java 的功能(如將 'L' 用作秒中的毫秒)。

以下轉換字元用來格式化時間:

'H' 24 小時制的小時,被格式化為必要時帶前導零的兩位數,即 00 - 23
'I' 12 小時制的小時,被格式化為必要時帶前導零的兩位數,即 01 - 12
'k' 24 小時制的小時,即 0 - 23
'l' 12 小時制的小時,即 1 - 12
'M' 小時中的分鐘,被格式化為必要時帶前導零的兩位數,即 00 - 59
'S' 分鐘中的秒,被格式化為必要時帶前導零的兩位數,即 00 - 60 ("60" 是支持閏秒所需的一個特殊值)。
'L' 秒中的毫秒,被格式化為必要時帶前導零的三位數,即 000 - 999
'N' 秒中的毫微秒,被格式化為必要時帶前導零的九位數,即 000000000 - 999999999
'p' 特定於語言環境的 上午或下午 標記以小寫形式表示,例如 "am" 或 "pm"。使用轉換前綴 'T' 可以強行將此輸出轉換為大寫形式。
'z' 相對於 GMT 的 RFC 822 格式的數字時區偏移量,例如 -0800
'Z' 表示時區縮寫形式的字元串。Formatter 的語言環境將取代參數的語言環境(如果有)。
's' 自協調世界時 (UTC) 1970 年 1 月 1 日 00:00:00 至現在所經過的秒數,即 Long.MIN_VALUE/1000Long.MAX_VALUE/1000 之間的差值。
'Q' 自協調世界時 (UTC) 1970 年 1 月 1 日 00:00:00 至現在所經過的毫秒數,即 Long.MIN_VALUELong.MAX_VALUE 之間的差值。

以下轉換字元用來格式化日期:

'B' 特定於語言環境的月份全稱,例如 "January""February"
'b' 特定於語言環境的月份簡稱,例如 "Jan""Feb"
'h' 'b' 相同。
'A' 特定於語言環境的星期幾全稱,例如 "Sunday""Monday"
'a' 特定於語言環境的星期幾簡稱,例如 "Sun""Mon"
'C' 除以 100 的四位數表示的年份,被格式化為必要時帶前導零的兩位數,即 00 - 99
'Y' 年份,被格式化為必要時帶前導零的四位數(至少),例如,0092 等於格里高里歷的 92 CE。
'y' 年份的最後兩位數,被格式化為必要時帶前導零的兩位數,即 00 - 99
'j' 一年中的天數,被格式化為必要時帶前導零的三位數,例如,對於格里高里歷是 001 - 366
'm' 月份,被格式化為必要時帶前導零的兩位數,即 01 - 13
'd' 一個月中的天數,被格式化為必要時帶前導零兩位數,即 01 - 31
'e' 一個月中的天數,被格式化為兩位數,即 1 - 31

以下轉換字元用於格式化常見的日期/時間組合。

'R' 24 小時制的時間,被格式化為 "%tH:%tM"
'T' 24 小時制的時間,被格式化為 "%tH:%tM:%tS"
'r' 12 小時制的時間,被格式化為 "%tI:%tM:%tS %Tp"。上午或下午標記 ('%Tp') 的位置可能與語言環境有關。
'D' 日期,被格式化為 "%tm/%td/%ty"
'F' ISO 8601 格式的完整日期,被格式化為 "%tY-%tm-%td"
'c' 日期和時間,被格式化為 "%ta %tb %td %tT %tZ %tY",例如 "Sun Jul 20 16:17:00 EDT 1969"

任何未明確定義為轉換的字元都是非法字元,並且都被保留,以供將來擴展使用。

標誌

下表總結了受支持的標誌。y 表示該標誌受指示參數型別支持。

標誌 常規 字元 整數 浮點 日期/時間 說明
'-' 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' 轉換。

4BigInteger 應用 'd''o''x''X' 轉換時,或者對 byteByteshortShortintIntegerlongLong 分別應用 'd' 轉換時適用。

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

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

寬度

寬度是將向輸出中寫入的最少字元數。對於行分隔符轉換,不適用寬度,如果提供寬度,則會拋出異常。

精度

對於常規參數型別,精度是將向輸出中寫入的最多字元數。

對於浮點轉換 'e''E''f',精度是小數點分隔符後的位數。如果轉換是 'g''G',那麼精度是捨入計算後所得數值的所有位數。如果轉換是 'a''A',則不必指定精度。

對於字元、整數和日期/時間參數型別轉換,以及百分比和行分隔符轉換,精度是不適用的;如果提供精度,則會拋出異常。

參數索引

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

根據位置參考參數的另一種方法是使用 '<' ('\u003c') 標誌,這將會重用以前格式說明符的參數。例如,以下兩條語句產生的字元相同:

   Calendar c = ...;
   String s1 = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);

   String s2 = String.format("Duke's Birthday: %1$tm %<te,%<tY", c);
 

詳細資訊

這一部分將提供格式化行為規範方面的細節,其中包括條件和異常、受支持的資料型別、本地化以及標誌、轉換和資料型別之間的交互。有關格式化概念的概觀,請參閱摘要

任何未明確定義為轉換、日期/時間轉換前綴或標誌的字元都是非法字元,並且這些字元都被保留,以供未來擴展使用。在格式字元串中使用這樣的字元會導致拋出 UnknownFormatConversionExceptionUnknownFormatFlagsException

如果格式說明符包含帶有無效值或不受支持的其他值的寬度或精度,則將分別拋出 IllegalFormatWidthExceptionIllegalFormatPrecisionException

如果格式說明符包含不適用於對應參數的轉換字元,則將拋出 IllegalFormatConversionException

所有指定異常都可能被 Formatter 的任何 format 方法以及任何 format 的便捷方法拋出,比如 String#format(String,Object...)String.formatjava.io.PrintStream#printf(String,Object...)PrintStream.printf。 String.format} and PrintStream.printf.

由大寫字元(如 'B''H''S''C''X''E''G''A''T')表示的轉換與那些相應的小寫字元表示的轉換相同,根據串流行的 Locale 規則將結果轉換成大寫形式除外。結果等同於 String.toUpperCase() 的以下調用

    out.toUpperCase() 

常規

以下常規轉換可應用於任何參數型別:

'b' '\u0062' 將產生 "true" 或 "false",由 Boolean.toString(boolean) 返回。

如果參數為 null,則結果為 "false"。如果參數是一個 boolean 值或 Boolean,那麼結果是由 String.valueOf() 返回的字元串。否則結果為 "true"。

如果給出 '#' 標誌,則將拋出 FormatFlagsConversionMismatchException

'B' '\u0042' 'b' 的大寫形式。
'h' '\u0068' 產生一個表示物件的雜湊碼值的字元串。

如果參數 argnull,則結果為 "null"。否則,結果為調用 Integer.toHexString(arg.hashCode()) 得到的結果。

如果給出 '#' 標誌,則將拋出 FormatFlagsConversionMismatchException

'H' '\u0048' 'h' 的大寫形式。
's' '\u0073' 產生一個字元串。

如果參數為 null,則結果為 "null"。如果參數實作了 Formattable,則調用其 formatTo 方法。否則,結果為調用參數的 toString() 方法得到的結果。

如果給出 '#' 標誌,且參數不是 Formattable,則將拋出 FormatFlagsConversionMismatchException

'S' '\u0053' 's' 的大寫形式。

以下 標誌 應用於常規轉換:

'-' '\u002d' 將輸出左對齊。根據需要在轉換值結尾處添加空格 ('\u0020'),以滿足欄位的最小寬度要求。如果沒有提供寬度,則將拋出 MissingFormatWidthException。如果沒有給出此標誌,則輸出將是右對齊的。
'#' '\u0023' 要求輸出使用替換形式。此形式的定義通過轉換指定。

寬度 是將向輸出中寫入的最少字元數。如果轉換值的長度小於寬度,則用 '  ' (\u0020') 填充輸出,直到字元總數等於寬度為止。預設情況下,是在左邊進行填充。如果給出 '-' 標誌,則在右邊進行填充。如果沒有指定寬度,則沒有最小寬度。

精度是將向輸出中寫入的最多字元數。精度的應用要先於寬度,因此,即使寬度大於精度,輸出也將被截取為 precision 字元。如果沒有指定精度,則對字元數沒有明確限制。

字元

此轉換可應用於 charCharacter。它還可應用於型別 byteByteshortShortintInteger。當 Character.isValidCodePoint(int) 返回 true 時,此轉換也可應用於 intInteger。如果返回 false,則將拋出 IllegalFormatCodePointException
'c' '\u0063' 將參數格式化為 Unicode Character Representation 中描述的 Unicode 字元。在該參數表示增補字元的情況下,它可能是多個 16 位 char

如果給出 '#' 標誌,則將拋出 FormatFlagsConversionMismatchException

'C' '\u0043' 'c' 的大寫形式。

'-' 標誌是為應用常規轉換而定義的。如果給出 '#' 標誌,則將拋出 FormatFlagsConversionMismatchException

寬度是為了實作常規轉換而定義的。

精度不適用。如果指定精度,則將拋出 IllegalFormatPrecisionException

數值

數值轉換分為以下幾類別:

  1. Byte、Short、Integer 和 Long
  2. BigInteger
  3. Float 和 Double
  4. BigDecimal

將根據以下演算法對數值型別進行格式化:

數字本地化演算法

在獲得數字的整數部分、小數部分和指數(適用於資料型別)之後,將應用以下轉換:

  1. 將字元串中的每個數字字元 d 都替換為特定於語言環境的數字,該數字是相對於當前語言環境的零數字 z 來計算的;即 d -  '0'  + z
  2. 如果存在小數點分隔符,則用特定於語言環境的小數點分隔符替換。
  3. 如果給出 ',' ('\u002c') flag 標誌,則插入特定於語言環境的組分隔符,這是通過從最低位到最高位瀏覽字元串的整數部分並不時插入該語言環境組大小定義的分隔符來實作的。
  4. 如果給出 '0' 標誌,則在符號字元(如果有的話)之後、第一個非零數字前插入特定於語言環境的零數字,直到字元串長度等於所要求的欄位寬度。
  5. 如果該值為負,並且給出了 '(' 標誌,那麼預先考慮 '(' ('\u0028'),並追加一個 ')' ('\u0029')。
  6. 如果該值為負(或者為浮點負零),並且沒有給出 '(' 標誌,那麼預先考慮 '-' ('\u002d')。
  7. 如果給出 '+' 標誌,並且該值為正或零(或者為浮點正零),那麼將預先考慮 '+' ('\u002b')。

如果該值為 NaN 或正無窮大,則分別輸出文本字元串 "NaN" 或 "Infinity"。如果該值為負無窮大,那麼輸出將是 "(Infinity)";否則如果給出 '(' 標誌,那麼輸出將是 "-Infinity"。這些值都沒有被本地化。

Byte、Short、Integer 和 Long

以下轉換可應用於 byteByteshortShortintIntegerlongLong

'd' '\u0054' 將參數格式化為十進制整數。應用本地化演算法

如果給出 '0' 標誌,並且值為負,則在符號後填充零。

如果給出 '#' 標誌,則將拋出 FormatFlagsConversionMismatchException

'o' '\u006f' 將參數格式化為以 8 為進制的整數。不應用本地化。

如果 x 為負,那麼結果將是通過將 2n 添加到值中產生的一個無符號值,其中 n 是在適當時候由類別 ByteShortIntegerLong 中的靜態 SIZE 欄位返回的型別中的位數。

如果給出 '#' 標誌,則輸出將始終以進制指示符 '0' 開始。

如果給出 '0' 標誌,則使用前導零填充輸出,這些零被填充到以下任意指示符號後面的欄位寬度中。

如果給出 '(''+'、'  ' 或 '、' 標誌,則將拋出 FormatFlagsConversionMismatchException

'x' '\u0078' 將參數格式化為以 16 為進制的整數。不應用本地化。

如果 x 為負,那麼結果將為把 2n 添加到值中產生的一個無符號值,其中 n 是在適當時候,由類別 ByteShortIntegerLong 中的靜態 SIZE 欄位返回的型別中的位數。

如果給出 '#' 標誌,則輸出將始終以進制指示符 '0x' 開始。

如果給出 '0' 標誌,則使用前導零填充輸出,這些零被填充到進制指示符或符號(如果存在)後面的欄位寬度中。

如果給出 '(''  ''+''、' 標誌,則將拋出 FormatFlagsConversionMismatchException

'X' '\u0058' 'x' 的大寫形式。將表示數字的整個字元串轉換為大寫,其中包括 'x' (如果有的話) 和所有十六進制數字 'a' - 'f' ('\u0061' - '\u0066')。

如果該轉換是 'o''x''X' 轉換,並且給出了 '#''0' 標誌,那麼結果將包含進制指示符(對於八進制是 '0',對於十六進制是 '0'"0x")、一定數量的零(基於寬度)和該值。

如果沒有給出 '-' 標誌,則在符號前填充空格。

以下 標誌 應用於數值整數轉換:

'+' '\u002b' 要求所有正數的輸出都包含一個正號。如果沒有給出此標誌,則只有負值包含符號。

如果同時給出了 '+''  ' 標誌,則將拋出 IllegalFormatFlagsException

'  ' '\u0020' 對於非負值的輸出,要求包括單個額外空格 ('\u0020')。

如果同時給出了 '+''  ' 標誌,則將拋出 IllegalFormatFlagsException

'0' '\u0030' 要求將前導填充到輸出中,這些零被填充到以下任意符號或進制指示符之後,以達到最小欄位寬度,轉換 NaN 或無窮大時除外。如果沒有提供寬度,則將拋出 MissingFormatWidthException

如果同時給出 '-''0' 標誌,則將拋出 IllegalFormatFlagsException

',' '\u002c' 要求輸出包括在本地化演算法的「群」一節中描述的特定於語言環境的組分隔符
'(' '\u0028' 要求輸出預先考慮 '(' ('\u0028'),並將 ')' ('\u0029') 追加到負值中。

如果沒有給出 標誌 ,則預設格式設置如下:

The 寬度 是將向輸出中寫入的最少字元數。這包括所有符號、數字、組分隔符、進制指示符和圓括號。如果轉換值的長度小於寬度,則用空格('\u0020') 填充輸出,直到字元總數等於寬度。預設情況下,在左邊進行填補。如果給出 '-' 標誌,則在右邊進行填補。如果沒有指定寬度,則沒有最小寬度。

精度不適用。如果指定精度,則將拋出 IllegalFormatPrecisionException

BigInteger

以下轉換可應用於 BigInteger

'd' '\u0054' 要求將輸出格式化為十進制整數。應用本地化演算法

如果給出 '#' 標誌,則將拋出 FormatFlagsConversionMismatchException

'o' '\u006f' 要求將輸出格式化為以 8 為進制的整數。不應用本地化。

如果 x 為負,那麼結果將是以 '-' ('\u002d') 開始的有符號值。允許對這種型別使用有符號輸出,因為它不同於基本型別,在沒有假定顯式資料型別大小的情況下,不可能創建無符號的等效值。

如果 x 為正數或零,且給出了 '+' 標誌,那麼結果是以 '+' ('\u002b') 開始的。

如果給出 '#' 標誌,那麼輸出將始終以 '0' 前綴開始。

如果給出 '0' 標誌,那麼將使用前導零填充輸出,這些零被填充到指示符後的欄位寬度中。

如果給出 ',' 標誌,則將拋出 FormatFlagsConversionMismatchException

'x' '\u0078' 要求將輸出格式化為以 16 為進制的整數。不應用本地化。

如果 x 為負,那麼結果是以 '-' ('_apos;) 開始的有符號值。此型別允許使用有符號輸出,因為與基本型別不同,如果不假定明確的資料型別大小,則不可能創建無符號的等效數。

如果 x 為正數或零,且給出了 '+' 標誌,那麼結果以 '+' ('\u002b') 開始。

如果給出 '#' 標誌,那麼輸出將始終以進制指示符 '0x' 開始。

如果給出 '0' 標誌,那麼將使用前導零填充輸出,這些零被填充到進制指示符或符號(如果存在)後面的欄位寬度中。

如果給出 ',' 標誌,則將拋出 FormatFlagsConversionMismatchException

'X' '\u0058' 'x' 的大寫形式。將表示數字的整個字元串轉換為大寫,其中包括 'x'(如果有的話)和所有十六進制數字 'a' - 'f' ('\u0061' - '\u0066')。

如果該轉換是 'o''x''X',並且給出了 '#''0' 標誌,那麼結果將包含進制指示符(對於八進制是 '0',對於十六進制是 '0'"0x")、一定數量的零(基於寬度)和該值。

如果給出 '0' 標誌,並且值為負,則在符號後填充零。

如果沒有給出 '-' 標誌,則在符號前填充空格。

應用為 Byte、Short、Integer 和 Long 定義的所有標誌。沒有給出標誌時的預設行為與 Byte、Short、Integer 和 Long 的行為相同。

寬度的規範與為 Byte、Short、Integer 和 Long 定義的規範相同。

精度不適用。如果指定精度,則將拋出 IllegalFormatPrecisionException

Float 和 Double

以下轉換可應用於 floatFloatdoubleDouble

'e' '\u0065' 要求使用科學記數法來格式化輸出。應用本地化演算法

數值 m 的格式取決它的值。

如果 m 是 NaN 或無窮大,則分別輸出文本字元串 "NaN" 或 "Infinity"。這些值都沒有被本地化。

如果 m 是正零或負零,則指數將是 "+00"

否則,結果是表示變數的符號和大小(絕對值)的字元串。符號的格式在本地化演算法中已經描述。數值 m 的格式取決它的值。

n 成為滿足 10n <= m < 10n+1 的唯一整數;讓 a 成為 m 和 10n 的精確算術商數值,且滿足 1 <= a < 10。然後將該數值解釋為 a 的整數部分,因為是一個小數位數,所以後面跟著小數點分隔符,再後面是表示 a 的小數部分的小數位數,後跟指數符號 'e' ('\u0065'),這之後是指數符號,後跟十進制整數形式表示的 n,它由方法 Long.toString(long, int) 產生,並用零填充,使其至少包括兩個位數。

在結果中,ma 的小數部分的位數等於精度。如果沒有指定精度,則預設值為 6。如果精度小於將出現在分別由 Float.toString(float)Double.toString(double) 返回的字元串中的小數點之後的位數,則使用四捨五入演算法對該值進行捨入運算。否則,可能通過追加零來達到所需精度。要獲得該值的規範表示形式,請在適當時候使用 Float.toString(float)Double.toString(double)

如果給出 ',' 標誌,則將拋出 FormatFlagsConversionMismatchException

'E' '\u0045' 'e' 的大寫形式。指數符號將是 'E' ('\u0045')。
'g' '\u0067' 要求將輸出格式化為下面描述的常規科學記數形式。應用本地化演算法

在對精度進行捨入運算後,所得數值 m 的格式取決於它的值。

如果 m 大於等於 10-4 但小於 10精度,則以十進制形式 表示它。

如果 m 小於 10-4 或者大於等於 10精度,則以電腦科學記數法 表示它。

m 中的總有效位數等於其精度。如果沒有指定精度,則其預設值為 6。如果精度為 0,則該值將為 1

如果給出 '#' 標誌,則將拋出 FormatFlagsConversionMismatchException

'G' '\u0047' 'g' 的大寫形式。
'f' '\u0066' 要求使用十進制形式來格式化輸出。使用本地化演算法

結果是表示參數的符號和大小(絕對值)的字元串。符號的格式在本地化演算法中已經描述。數值 m 的格式取決它的值。

如果 m 是 NaN 或無窮大,則將分別輸出文本字元串 "NaN" 或 "Infinity"。這些值都沒有被本地化。

將數值格式化為 m 的整數部分(不帶前導零),後跟小數點分隔符,再後面是表示 m 的小數部分的一個或多個十進制數字。

在結果中,ma 的小數部分的位數等於精度。如果沒有指定精度,則預設值為 6。如果該精度小於將要出現在分別由 Float.toString(float)Double.toString(double) 返回的字元串中的小數點之後的位數,則使用四捨五入演算法對該值進行捨入運算。否則,可能通過追加零來達到所需精度。要獲得該值的規範表示形式,請在適當時候使用 Float.toString(float)Double.toString(double)

'a' '\u0061' 要求將輸出格式化為十六進制指數形式。不應用本地化。

結果是表示參數 x 的符號和大小(絕對值)的字元串。

如果 x 為負值或負零值,那麼結果將以 '-' ('\u002d') 開始。

如果 x 為正值或正零值,且給出了 '+' 標誌,那麼結果將以 '+' ('\u002b') 開始。

數值 m 的格式取決它的值。

  • 如果該值是 NaN 或無窮大,則將分別輸出文本字元串 "NaN" 或 "Infinity"。
  • 如果 m 等於零,則用字元串 "0x0.0p0" 表示它。
  • 如果 m 是具有標準化表現形式的 double 值,則用子字元串來表示有效位數和指數欄位。有效位數是用字元串 "0x1." 表示的,後跟該有效位數小數部分的十六進製表示形式。指數用 'p' ('\u0070') 表示,後跟無偏指數的十進制字元串,該值是對指數值調用 Integer.toString 所產生的。
  • 如果 m 是具有低正常表現形式的 double 值,則用字元 "0x0." 表示有效位數,後跟該有效位數小數部分的十六進製表示。用 'p-1022' 表示指數。注意,在低正常有效位數中,至少必須有一個非零數字。

如果給出 '('',' 標誌,則將拋出 FormatFlagsConversionMismatchException

'A' '\u0041' 'a' 的大寫形式。表示數字的整個字元串將被轉換為大寫形式,其中包括 'x' ('\u0078') 和 'p' ('\u0070' 以及所有的十六進制數字 'a' - 'f' ('\u0061' - '\u0066')。

應用為 Byte、Short、Integer 和 Long 定義的所有標誌

如果給出 '#' 標誌,則將始終存在小數點分隔符。

如果沒有給出 標誌 則預設格式設置如下:

The 寬度 是將向輸出中寫入的最少字元數。這包括可應用的所有符號、數字、組分隔符、小數點分隔符、指數符號、進制指示符、圓括號和表示無窮大和 NaN 的字元串。如果轉換值的長度小於寬度,則用空格('\u0020') 填充輸出,直到字元總數等於寬度。預設情況下,在左邊進行填充。如果給出 '-' 標誌,則在右邊進行填充。如果沒有指定寬度,則沒有最小寬度。

如果 轉換 'e''E''f',則精度是小數點分隔符後的位數。如果沒有指定精度,則假定精度為 6

如果轉換是 'g''G' 轉換,那麼精度就是捨入運算後所得數值的總有效位數。如果沒有指定精度,則預設值為 6。如果精度為 0,則該值將為 1

如果轉換是 'a''A' 轉換,則精度是小數點分隔符後十六進制數字的位數。如果沒有提供精度,則將輸出 Double.toHexString(double) 返回的所有數字。

BigDecimal

以下轉換可應用於 BigDecimal

'e' '\u0065' 要求使用電腦科學記數法對輸出進行格式化。應用本地化演算法

數值 m 的格式取決於它的值。

如果 m 為正零或負零,則指數將為 "+00"

否則,結果是表示參數的符號和大小(絕對值)的字元串。符號的格式在本地化演算法中已經描述。數值 m 的格式取決於它的值。

n 成為滿足 10n <= m < 10n+1 的唯一整數;讓 a 成為 m 和 10n 的精確算術商數值,且滿足 1 <= a < 10。然後將該數值解釋為 a 的整數部分,因為是一個小數位數,所以後面跟著小數點分隔符,再後面是表示 a 的小數部分的小數位數,後跟指數符號 'e' ('\u0065'),這之後是指數符號,後跟十進制整數形式表示的 n,它由方法 Long.toString(long, int) 產生,並用零填充,使其至少包括兩個位數。

在結果中,ma 的小數部分的位數等於精度。如果沒有指定精度,則預設值為 6。如果精度小於將出現在分別由 Float.toString(float)Double.toString(double) 返回的字元串中的小數點之後的位數,則使用四捨五入演算法對該值進行捨入運算。否則,可能通過追加零來達到所需精度。要獲得該值的規範表示形式,請使用 BigDecimal.toString()

如果給出 ',' 標誌,則將拋出 FormatFlagsConversionMismatchException

'E' '\u0045' 'e' 的大寫形式。指數符號將是 'E' ('\u0045')。
'g' '\u0067' 要求將輸出格式化為下面描述的常規科學記數形式。應用本地化演算法

在對精度進行捨入運算後,所得數值 m 的格式取決於它的值。

如果 m 大於等於 10-4 但小於 10精度,則以十進制形式 表示它。

如果 m 小於 10-4 或者大於等於 10精度,則以電腦科學記數法 表示它。

m 中的總的有效位數等於精度。如果沒有指定精度,則預設值為 6。如果精度為 0,則該值將為 1

如果給出 '#' 標誌,則將拋出 FormatFlagsConversionMismatchException

'G' '\u0047' 'g' 的大寫形式。
'f' '\u0066' 要求使用十進制形式來格式化輸出。應用本地化演算法

結果是表示參數的符號和大小(絕對值)的字元串。符號的格式在本地化演算法中已經描述。數值 m 的格式取決於它的值。

將該數值格式化為 m 的整數部分(不帶前導零),後跟小數點分隔符,再後面是表示 m 的小數部分的一個或多個十進制數字。

在結果中,ma 的小數部分的位數等於精度。如果沒有指定精度,則預設值為 6。如果精度小於將出現在分別由 Float.toString(float)Double.toString(double) 返回的字元串中的小數點之後的位數,則使用四捨五入演算法對該值進行捨入運算。否則,可能通過追加零來達到所需精度。要獲得該值的規範表示形式,請使用 BigDecimal.toString()

應用為 Byte、Short、Integer 和 Long 定義的所有標誌

如果給出 '#' 標誌,則將始終存在小數點分隔符。

沒有給出標誌時的預設行為與 Float 和 Double 的行為相同。

寬度精度的規範與為 Float 和 Double 定義的規範相同。

日期/時間

此轉換可應用於 longLongCalendarDate

't' '\u0074' 日期和時間轉換字元的前綴。
'T' '\u0054' 't' 的大寫形式。

以下日期和時間轉換字元後綴是為 't''T' 轉換定義的。這些型別類似於但不完全等同於 GNU date 和 POSIX strftime(3c) 定義的那些型別。提供其他轉換型別是為了存取特定於 Java 的功能(例如,'L' 用於秒中的毫秒)。

以下轉換字元用來格式化時間:

'H' '\u0048' 24 小時制的小時,被格式化為必要時帶前導零的兩位數,即 00 - 2300 對應午夜。
'I' '\u0049' 12 小時制的小時,被格式化為必要時帶前導零的兩位數,即 01 - 1201 對應於 1 點鐘(上午或下午)。
'k' '\u006b' 24 小時制的小時,即 0 - 230 對應於午夜。
'l' '\u006c' 12 小時制的小時,即 1 - 121 對應於上午或下午的一點鐘。
'M' '\u004d' 小時中的分鐘,被格式化為必要時帶前導零的兩位數,即 00 - 59
'S' '\u0053' 分鐘中的秒,被格式化為必要時帶前導零的兩位數,即 00 - 60("60" 是支持閏秒所需的一個特殊值)。
'L' '\u004c' 秒中的毫秒,被格式化為必要時帶前導零的三位數,即 000 - 999
'N' '\u004e' 秒中的毫微秒,被格式化為必要時帶前導零的九位數,即 000000000 - 999999999。此值的精度受底層作業系統或硬體解析的限制。
'p' '\u0070' 特定於語言環境的上午或下午標記以小寫形式表示,例如 "am" 或 "pm"。使用轉換前綴 'T' 可以強行將此輸出轉換為大寫形式。(注意,'p' 產生的輸出是小寫的。而 GNU date 和 POSIX strftime(3c) 產生的輸出是大寫的。)
'z' '\u007a' 相對於 GMT 的 RFC 822 格式的數字時區偏移量,例如 -0800
'Z' '\u005a' 表示時區的縮寫形式的字元串。
's' '\u0073' 自協調世界時 (UTC) 1970 年 1 月 1 日 00:00:00 至現在所經過的秒數,也就是 Long.MIN_VALUE/1000Long.MAX_VALUE/1000 之間的差值。
'Q' '\u004f' 自協調世界時 (UTC) 1970 年 1 月 1 日 00:00:00 至現在所經過的毫秒數,即 Long.MIN_VALUELong.MAX_VALUE 之間的差值。此值的精度受底層作業系統或硬體解析的限制。

以下轉換字元用來格式化日期:

'B' '\u0042' 特定於語言環境的完整月份名稱,例如 "January""February"
'b' '\u0062' 特定於語言環境的月份簡稱,例如 "Jan""Feb"
'h' '\u0068' 'b' 相同。
'A' '\u0041' 特定於語言環境的星期幾的全稱,例如 "Sunday""Monday"
'a' '\u0061' 特定於語言環境的星期幾的簡稱,例如 "Sun""Mon"
'C' '\u0043' 除以 100 的四位數表示的年份,被格式化為必要時帶前導零的兩位數,即 00 - 99
'Y' '\u0059' 年份,被格式化為必要時帶前導零的四位數(至少),例如 0092 等於格里高里歷的 92 CE。
'y' '\u0079' 年份的最後兩位數,被格式化為必要時帶前導零的兩位數,即 00 - 99
'j' '\u006a' 一年中的天數,被格式化為必要時帶前導零的三位數,例如,對於格里高里歷是 001 - 366001 對應於一年中的第一天。
'm' '\u006d' 月份,被格式化為必要時帶前導零的兩位數,即 01 - 13,其中 "01" 是一年的第一個月,("13" 是支持陰曆所需的一個特殊值)。
'd' '\u0064' 一個月中的天數,被格式化為必要時帶前導零的兩位數,即 01 - 31,其中 "01" 是一個月的第一天。
'e' '\u0065' 一個月中的天數,被格式化為兩位數,即 1 - 31,其中 "1" 是一個月中的第一天。

以下轉換字元用於格式化常見的日期/時間組合。

'R' '\u0052' 24 小時制的時間,被格式化為 "%tH:%tM"
'T' '\u0054' 24 小時制的時間,被格式化為 "%tH:%tM:%tS"
'r' '\u0072' 12 小時制的時間,被格式化為 "%tI:%tM:%tS %Tp"。上午或下午標記 ('%Tp') 的位置可能與地區有關。
'D' '\u0044' 日期,被格式化為 "%tm/%td/%ty"
'F' '\u0046' ISO 8601 格式的完整日期,被格式化為 "%tY-%tm-%td"
'c' '\u0063' 日期和時間,被格式化為 "%ta %tb %td %tT %tZ %tY",例如 "Sun Jul 20 16:17:00 EDT 1969"

應用為常規轉換而定義的 '-' 標誌。如果給出 '#' 標誌,則將拋出 FormatFlagsConversionMismatchException

寬度 是將向輸出中寫入的最少字元數。如果轉換值的長度小於 width,則用空格('\u0020') 來填充輸出,直到總字元數等於寬度。預設情況下,在左邊進行填充。如果給出 '-' 標誌,則在右邊進行填充。如果沒有指定寬度,則沒有最小寬度。

精度不適用。如果指定了精度,則將拋出 IllegalFormatPrecisionException

百分比

該轉換不對應於任何參數。

'%' 結果是一個文字值 '%' ('\u0025')

寬度 是將向輸出中寫入的最少字元數,包括 '%'。如果轉換值的長度小於 width,則用空格 ('\u0020') 來填充輸出,直到總字元數等於寬度。在左邊進行填充。如果沒有指定寬度,則只輸出 '%'

應用為常規轉換而定義的 '-' 標誌。如果提供其他任何標誌,則將拋出 FormatFlagsConversionMismatchException

精度不適用。如果指定精度,則將拋出 IllegalFormatPrecisionException

行分隔符

該轉換不對應於任何參數。

'n' System.getProperty("line.separator") 返回的特定於平臺的行分隔符。

標誌、寬度和精度都不可用。如果提供這三者,則會分別拋出 IllegalFormatFlagsExceptionIllegalFormatWidthExceptionIllegalFormatPrecisionException

參數索引

格式說明符可以通過三種方式參考參數:

可能有一個使用所有索引形式的格式字元串,例如:

   formatter.format("%2$s %s %<s %s", "a", "b", "c", "d")
   // -> "b a a b"
   // "c" and "d" are ignored because they are not referenced
 

參數的最大數量受到 Java Machine Specification 定義的 Java 陣列 的最大維數的限制。如果參數索引與可用參數不對應,則拋出 MissingFormatArgumentException

如果參數多於格式說明符,則忽略額外的參數。

除非另行指定,否則向此類別中的任何方法或建構子傳遞 null 參數都將拋出 NullPointerException

從以下版本開始:
1.5

巢狀類別摘要
static class Formatter.BigDecimalLayoutForm
           
 
建構子摘要
Formatter()
          建構一個新 formatter。
Formatter(Appendable a)
          建構一個帶指定目標檔案的新 formatter。
Formatter(Appendable a, Locale l)
          建構一個帶指定目標檔案和語言環境的新 formatter。
Formatter(File file)
          建構一個帶指定檔案的新 formatter。
Formatter(File file, String csn)
          建構一個帶指定檔案和字元集的新 formatter。
Formatter(File file, String csn, Locale l)
          建構一個帶指定檔案、字元集和語言環境的新 formatter。
Formatter(Locale l)
          建構一個帶指定語言環境的新 formatter。
Formatter(OutputStream os)
          建構一個帶指定輸出串流的新 formatter。
Formatter(OutputStream os, String csn)
          建構一個帶指定輸出串流和字元集的新 formatter。
Formatter(OutputStream os, String csn, Locale l)
          建構一個帶指定輸出串流、字元集和語言環境的新 formatter。
Formatter(PrintStream ps)
          建構一個帶指定輸出串流的新 formatter。
Formatter(String fileName)
          建構一個帶指定檔案名的新 formatter。
Formatter(String fileName, String csn)
          建構一個帶指定檔案名和字元集的新 formatter。
Formatter(String fileName, String csn, Locale l)
          建構一個帶指定檔案名、字元集和語言環境的新 formatter。
 
方法摘要
 void close()
          關閉此 formatter。
 void flush()
          刷新此 formatter。
 Formatter format(Locale l, String format, Object... args)
          使用指定的語言環境、格式字元串和參數,將一個格式化字元串寫入此物件的目標檔案中。
 Formatter format(String format, Object... args)
          使用指定格式字元串和參數將一個格式化字元串寫入此物件的目標檔案中。
 IOException ioException()
          返回由此 formatter 的 Appendable 方法上次拋出的 IOException 異常。
 Locale locale()
          返回建構此 formatter 時設置的語言環境。
 Appendable out()
          返回輸出的目標檔案。
 String toString()
          返回對輸出的目標檔案調用 toString() 的結果。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

建構子詳細資訊

Formatter

public Formatter()
建構一個新 formatter。

格式化輸出的目標檔案是 StringBuilder,可以通過調用 out() 來獲取它,還可以調用 toString() 將其當前內容轉換為一個字元串。對於 Java 虛擬機器的此實例,所使用的語言環境是預設語言環境


Formatter

public Formatter(Appendable a)
建構一個帶指定目標檔案的新 formatter。

對於 Java 虛擬機器的此實例,所使用的語言環境是預設語言環境

參數:
a - 格式化輸出的 Destination。如果 anull,則創建一個 StringBuilder

Formatter

public Formatter(Locale l)
建構一個帶指定語言環境的新 formatter。

格式化輸出的目標檔案是 StringBuilder,可以通過調用 out() 來獲取它,還可以調用 toString() 將其內容轉換為一個字元串。

參數:
l - 格式化期間應用的語言環境。如果 lnull,則不應用本地化。

Formatter

public Formatter(Appendable a,
                 Locale l)
建構一個帶指定目標檔案和語言環境的新 formatter。

參數:
a - 格式化輸出的 Destination。如果 anull,則創建一個 StringBuilder
l - 格式化期間應用的語言環境。如果 lnull,則不應用本地化。

Formatter

public Formatter(String fileName)
          throws FileNotFoundException
建構一個帶指定檔案名的新 formatter。

對於 Java 虛擬機器的此實例,所使用的字元集是預設字元集。

對於 Java 虛擬機器的此實例,所使用的語言環境是預設語言環境

參數:
fileName - 用作此 formatter 的目標檔案的檔案名稱。如果存在該檔案,則將其大小截取為零;否則創建一個新檔案。將輸出寫入檔案中,並對其進行緩衝處理。
拋出:
SecurityException - 如果存在安全管理器,並且 checkWrite(fileName) 拒絕對檔案進行寫入存取。
FileNotFoundException - 如果給定的檔案名稱不表示現有的可寫常規檔案,並且無法創建該名稱的新常規檔案,或者在打開或創建檔案時發生其他一些錯誤

Formatter

public Formatter(String fileName,
                 String csn)
          throws FileNotFoundException,
                 UnsupportedEncodingException
建構一個帶指定檔案名和字元集的新 formatter。

對於 Java 虛擬機器的此實例,所使用的語言環境是預設語言環境

參數:
fileName - 用作此 formatter 的目標檔案的檔案名稱。如果存在該檔案,則將其大小截取為零;否則創建一個新檔案。將輸出寫入檔案中,並對其進行緩衝處理。
csn - 受支持的字元集的名稱
拋出:
FileNotFoundException - 如果給定的檔案名稱不表示現有的可寫常規檔案,並且無法創建該名稱的新常規檔案,或者在打開或創建檔案時發生其他一些錯誤
SecurityException - 如果存在安全管理器,並且 checkWrite(fileName) 拒絕對檔案進行寫入存取
UnsupportedEncodingException - 如果不支持指定字元集

Formatter

public Formatter(String fileName,
                 String csn,
                 Locale l)
          throws FileNotFoundException,
                 UnsupportedEncodingException
建構一個帶指定檔案名、字元集和語言環境的新 formatter。

參數:
fileName - 用作此 formatter 的目標檔案的檔案名稱。如果存在該檔案,則將其大小截取為零;否則,創建一個新檔案。將輸出寫入檔案中,並對其進行緩衝處理。
csn - 受支持的字元集的名稱
l - 格式化過程中應用的語言環境。如果 lnull,則不應用本地化。
拋出:
FileNotFoundException - 如果給定的檔案名稱不表示現有的可寫常規檔案,並且無法創建該名稱的新常規檔案,或者在打開或創建檔案時發生其他一些錯誤
SecurityException - 如果存在安全管理器,並且 checkWrite(fileName) 拒絕對檔案進行寫入存取。
UnsupportedEncodingException - 如果不支持指定字元集

Formatter

public Formatter(File file)
          throws FileNotFoundException
建構一個帶指定檔案的新 formatter。

對於 Java 虛擬機器的此實例,所使用的字元集是預設字元集

對於 Java 虛擬機器的此實例,所使用的語言環境是預設語言環境

參數:
file - 作為此 formatter 的目標檔案使用的檔案。如果存在該檔案,則將其大小截取為零;否則,創建一個新檔案。將輸出寫入檔案中,並對其進行緩衝處理。
拋出:
SecurityException - 如果存在安全管理器,並且 checkWrite(file.getPath()) 拒絕對檔案進行寫入存取。
FileNotFoundException - 如果給定的檔案物件不表示現有的可寫常規檔案,並且無法創建該名稱的新常規檔案,或者在打開或創建檔案時發生其他一些錯誤

Formatter

public Formatter(File file,
                 String csn)
          throws FileNotFoundException,
                 UnsupportedEncodingException
建構一個帶指定檔案和字元集的新 formatter。

對於 Java 虛擬機器的此實例,所使用的語言環境是預設語言環境

參數:
file - 作為此 formatter 的目標檔案使用的檔案。如果存在該檔案,則將其大小截取為零;否則,創建一個新檔案。將輸出寫入檔案中,並對其進行緩衝處理。
csn - 受支持的字元集的名稱
拋出:
FileNotFoundException - 如果給定的檔案物件不表示現有的可寫常規檔案,並且無法創建該名稱的新常規檔案,或者在打開或創建檔案時發生其他一些錯誤
SecurityException - 如果存在安全管理器,並且 checkWrite(file.getPath()) 拒絕對檔案進行寫入存取
UnsupportedEncodingException - 如果不支持指定字元集

Formatter

public Formatter(File file,
                 String csn,
                 Locale l)
          throws FileNotFoundException,
                 UnsupportedEncodingException
建構一個帶指定檔案、字元集和語言環境的新 formatter。

參數:
file - 作為此 formatter 的目標檔案使用的檔案。如果存在該檔案,則將其大小截取為零;否則,創建一個新檔案。將輸出寫入檔案中,並對其進行緩衝處理。
csn - 受支持的字元集的名稱
l - 格式化過程中應用的語言環境。如果 lnull,則不應用本地化。
拋出:
FileNotFoundException - 如果給定的檔案物件不表示現有的可寫常規檔案,並且無法創建該名稱的新常規檔案,或者在打開或創建檔案時發生其他一些錯誤
SecurityException - 如果存在安全管理器,並且 checkWrite(file.getPath()) 拒絕對檔案進行寫入存取。
UnsupportedEncodingException - 如果不支持指定字元集

Formatter

public Formatter(PrintStream ps)
建構一個帶指定輸出串流的新 formatter。

對於 Java 虛擬機器的此實例,所使用的語言環境是預設語言環境

將字元寫入給定的 PrintStream 物件,並使用該物件的字元集對其進行編碼。

參數:
ps - 作為此 formatter 的目標檔案使用的串流。

Formatter

public Formatter(OutputStream os)
建構一個帶指定輸出串流的新 formatter。

對於 Java 虛擬機器的此實例,所使用的字元集是預設字元集

對於 Java 虛擬機器的此實例,所使用的語言環境是預設語言環境

參數:
os - 作為此 formatter 的目標檔案使用的串流。將對輸出進行緩衝。

Formatter

public Formatter(OutputStream os,
                 String csn)
          throws UnsupportedEncodingException
建構一個帶指定輸出串流和字元集的新 formatter。

對於 Java 虛擬機器的此實例,所使用的語言環境是預設語言環境

參數:
os - 作為此 formatter 的目標檔案使用的串流。將對輸出進行緩衝。
csn - 受支持的字元集的名稱
拋出:
UnsupportedEncodingException - 如果不支持指定字元集

Formatter

public Formatter(OutputStream os,
                 String csn,
                 Locale l)
          throws UnsupportedEncodingException
建構一個帶指定輸出串流、字元集和語言環境的新 formatter。

參數:
os - 作為此 formatter 的目標檔案使用的串流。將對輸出進行緩衝。
csn - 受支持的字元集的名稱
l - 格式化過程中應用的語言環境。如果 lnull,則不應用本地化。
拋出:
UnsupportedEncodingException - 如果不支持指定字元集
方法詳細資訊

locale

public Locale locale()
返回建構此 formatter 時設置的語言環境。

此物件的帶語言環境參數的格式方法不會更改該值。

返回:
如果沒有應用本地化,則返回 null;否則返回一個語言環境
拋出:
FormatterClosedException - 如果已經通過調用 close() 方法關閉此 formatter

out

public Appendable out()
返回輸出的目標檔案。

返回:
輸出的目標檔案
拋出:
FormatterClosedException - 如果已經通過調用 close() 方法關閉此 formatter

toString

public String toString()
返回對輸出的目標檔案調用 toString() 的結果。例如,以下程式碼將文本格式化到 StringBuilder 中,然後獲取得到的字元串:
   Formatter f = new Formatter();
   f.format("Last reboot at %tc", lastRebootDate);
   String s = f.toString();
   // -> s == "Last reboot at Sat Jan 01 00:00:00 PST 2000"
 

調用此方法的方式與調用 out().toString() 的方式完全相同。

     out().toString() 

根據針對 AppendabletoString 的規範,返回的字元串可能否包含(也可能不包含)寫入目標檔案的字元。例如,緩衝器通常在 toString() 中返回其內容,而串流不能這樣做,因為資料已被丟棄。

覆寫:
類別 Object 中的 toString
返回:
對輸出目標檔案調用 toString() 的結果
拋出:
FormatterClosedException - 如果已經通過調用 close() 方法關閉此 formatter

flush

public void flush()
刷新此 formatter。如果目標檔案實作 Flushable 介面,則調用其 flush 方法。

刷新 formatter 會使目標檔案中的所有緩衝輸出都寫入底層串流中。

指定者:
介面 Flushable 中的 flush
拋出:
FormatterClosedException - 如果已經通過調用 close() 方法關閉此 formatter

close

public void close()
關閉此 formatter。如果目標檔案實作 Closeable 介面,則調用其 close 方法。

關閉 formatter 允許釋放它可能保持(比如打開檔案)的資源。如果已經關閉 formatter,則調用此方法無效。

如果試圖在此 formatter 已經關閉之後調用其中除 ioException() 之外的任何方法,那麼都將導致 FormatterClosedException

指定者:
介面 Closeable 中的 close

ioException

public IOException ioException()
返回由此 formatter 的 Appendable 方法上次拋出的 IOException 異常。

如果目標檔案的 append() 方法從未拋出 IOException,則此方法將始終返回 null

返回:
如果不存在這樣的異常,則返回由 Appendable 或 null 上次拋出的異常。

format

public Formatter format(String format,
                        Object... args)
使用指定格式字元串和參數將一個格式化字元串寫入此物件的目標檔案中。使用的語言環境是建構此 formatter 期間定義的語言環境。

參數:
format - 在格式字元串的語法中描述的格式字元串。
args - 格式字元串中的格式說明符參考的參數。如果參數多於格式說明符,則忽略額外的參數。參數的最大數量受到 Java Virtual Machine Specification 定義的 Java 陣列的最大維數的限制。
返回:
此 formatter
拋出:
IllegalFormatException - 如果格式字元串包含非法語法、與給定參數不相容的格式說明符、對給定格式字元串而言不夠充足的參數或其他非法條件。有關所有可能的格式錯誤的規範,請參閱 formatter 類別規範的詳細資訊部分。
FormatterClosedException - 如果已經通過調用 close() 方法關閉此 formatter

format

public Formatter format(Locale l,
                        String format,
                        Object... args)
使用指定的語言環境、格式字元串和參數,將一個格式化字元串寫入此物件的目標檔案中。

參數:
l - 格式化過程中應用的語言環境。如果 lnull,則不應用本地化。這不會改變建構期間設置的物件的語言環境。
format - 在格式字元串的語法中描述的格式字元串
args - 格式字元串中的格式說明符參考的參數。如果參數多於格式說明符,則忽略額外的參數。參數的最大數量受到 Java Virtual Machine Specification 定義的 Java 陣列的最大維數的限制
返回:
此 formatter
拋出:
IllegalFormatException - 如果格式字元串包含非法語法、與給定參數不相容的格式說明符、對給定格式字元串而言不夠充足的參數或其他非法條件。有關所有可能的格式錯誤的規範,請參閱 formatter 類別規範的詳細資訊部分。
FormatterClosedException - 如果已經通過調用 close() 方法關閉此 formatter

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only