實現格式化的流對象是PrintWriter(字符流類)或PrintStream(字節流類)的實例。html
你可能須要的惟一PrintStream
對象是 System.out和 System.err(有關這些對象的更多信息,請參閱 命令行中的I/O),當你須要建立格式化的輸出流時,請實例化PrintWriter
,而不是PrintStream
。
與全部字節和字符流對象同樣,PrintStream
和PrintWriter
的實例實現了一組標準的write
方法,用於簡單的字節和字符輸出,此外,PrintStream
和PrintWriter
都實現了將內部數據轉換爲格式化輸出的相同的一組方法,提供兩個級別的格式:java
print
和println
以標準方式格式化各個值。format
基於格式字符串格式化幾乎任意數字值,具備許多用於精確格式化的選項。print
和println
方法使用適當的toString
方法轉換值後,調用print
或println
會輸出單個值,咱們能夠在Root示例中看到這一點:git
public class Root { public static void main(String[] args) { int i = 2; double r = Math.sqrt(i); System.out.print("The square root of "); System.out.print(i); System.out.print(" is "); System.out.print(r); System.out.println("."); i = 5; r = Math.sqrt(i); System.out.println("The square root of " + i + " is " + r + "."); } }
這是Root
的輸出:github
The square root of 2 is 1.4142135623730951. The square root of 5 is 2.23606797749979.
i
和r
變量格式化兩次:第一次使用print
重載方法的代碼,第二次經過Java編譯器自動生成的轉換代碼,其使用toString
,你能夠經過這種方式格式化任何值,但你沒法控制結果。編程
format
方法根據格式字符串格式化多個參數,格式字符串由嵌入格式說明符的靜態文本組成,除格式說明符外,格式字符串輸出不變。segmentfault
格式字符串支持許多功能,在本教程中,咱們將介紹一些基礎知識,有關完整說明,請參閱API規範中的格式字符串語法。api
Root2示例使用單個format
調用格式化兩個值:oracle
public class Root2 { public static void main(String[] args) { int i = 2; double r = Math.sqrt(i); System.out.format("The square root of %d is %f.%n", i, r); } }
這是輸出:編程語言
The square root of 2 is 1.414214.
與本例中使用的三個格式說明符同樣,全部格式說明符都以%
開頭,以1或2個字符的轉換結束,該轉換指定生成的格式化輸出類型,這裏使用的三個轉換是:spa
d
將整數值格式化爲十進制值。f
將浮點值格式化爲十進制值。n
輸出特定於平臺的行結束符。如下是其餘一些轉換:
x
將整數格式化爲十六進制值。s
將任何值格式化爲字符串。tB
將整數格式化爲特定於語言環境的月份名稱。還有不少其餘轉換。
除%%
和%n
外,全部格式說明符必須匹配一個參數,若是不這樣作,則拋出異常。在Java編程語言中,
\n
轉義符始終生成換行符(\u000A
),除非你特別須要換行符,不然請勿使用\n
,要獲取本地平臺的正確行分隔符,請使用%n
。
除了轉換以外,格式說明符還能夠包含幾個額外元素,以進一步自定義格式化輸出,這裏有一個例子,Format,它使用了全部可能的元素類型。
public class Format { public static void main(String[] args) { System.out.format("%f, %1$+020.10f %n", Math.PI); } }
這是輸出:
3.141593, +00000003.1415926536
附加元素都是可選的,下圖顯示了較長的說明符如何分解爲元素。
元素必須按所示順序出現,從右側開始,可選元素是:
s
和其餘常規轉換,這是格式化值的最大寬度,若有必要,該值將被截斷。Format
示例中,+
標誌指定應始終使用符號格式化數字,0
標誌指定0
是填充字符。其餘標誌包括 — (在右邊填充)和(帶有特定於語言環境的千位分隔符的格式號),請注意,某些標誌不能與某些其餘標誌一塊兒使用或與某些轉換一塊兒使用。<
以匹配與前一個說明符相同的參數,所以,這個例子能夠寫爲:System.out.format("%f, %<+020.10f %n", Math.PI);