Java™ 教程(格式化流)

格式化流

實現格式化的流對象是PrintWriter(字符流類)或PrintStream(字節流類)的實例。html

你可能須要的惟一 PrintStream對象是 System.outSystem.err(有關這些對象的更多信息,請參閱 命令行中的I/O),當你須要建立格式化的輸出流時,請實例化 PrintWriter,而不是 PrintStream

與全部字節和字符流對象同樣,PrintStreamPrintWriter的實例實現了一組標準的write方法,用於簡單的字節和字符輸出,此外,PrintStreamPrintWriter都實現了將內部數據轉換爲格式化輸出的相同的一組方法,提供兩個級別的格式:java

  • printprintln以標準方式格式化各個值。
  • format基於格式字符串格式化幾乎任意數字值,具備許多用於精確格式化的選項。

printprintln方法

使用適當的toString方法轉換值後,調用printprintln會輸出單個值,咱們能夠在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.

ir變量格式化兩次:第一次使用print重載方法的代碼,第二次經過Java編譯器自動生成的轉換代碼,其使用toString,你能夠經過這種方式格式化任何值,但你沒法控制結果。編程

format方法

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

附加元素都是可選的,下圖顯示了較長的說明符如何分解爲元素。

io-spec.gif

元素必須按所示順序出現,從右側開始,可選元素是:

  • Precision,對於浮點值,這是格式化值的數學精度,對於s和其餘常規轉換,這是格式化值的最大寬度,若有必要,該值將被截斷。
  • Width,格式化值的最小寬度,若有必要,將填充該值,默認狀況下,該值使用空格填充。
  • Flags,指定其餘格式選項,在Format示例中,+標誌指定應始終使用符號格式化數字,0標誌指定0是填充字符。其餘標誌包括 — (在右邊填充)和(帶有特定於語言環境的千位分隔符的格式號),請注意,某些標誌不能與某些其餘標誌一塊兒使用或與某些轉換一塊兒使用。
  • Argument Index,參數索引容許你顯式匹配指定的參數,你還能夠指定<以匹配與前一個說明符相同的參數,所以,這個例子能夠寫爲:System.out.format("%f, %<+020.10f %n", Math.PI);

上一篇:掃描

下一篇:命令行I/O

相關文章
相關標籤/搜索