格式化流
實現格式化的流對象是PrintWriter(字符流類)或PrintStream(字節流類)的實例。
你可能需要的唯一PrintStream對象是System.out和System.err(有關這些對象的更多信息,請參閱命令行中的I/O),當你需要創建格式化的輸出流時,請實例化PrintWriter,而不是PrintStream。
與所有字節和字符流對象一樣,PrintStream和PrintWriter的實例實現了一組標準的write方法,用于簡單的字節和字符輸出,此外,PrintStream和PrintWriter都實現了將內部數據轉換為格式化輸出的相同的一組方法,提供兩個級別的格式:
print和println以標準方式格式化各個值。
format基于格式字符串格式化幾乎任意數字值,具有許多用于精確格式化的選項。
print和println方法使用適當的toString方法轉換值后,調用print或println會輸出單個值,我們可以在Root示例中看到這一點:
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的輸出:
The square root of 2 is 1.4142135623730951. The square root of 5 is 2.23606797749979.
i和r變量格式化兩次:第一次使用print重載方法的代碼,第二次通過Java編譯器自動生成的轉換代碼,其使用toString,你可以通過這種方式格式化任何值,但你無法控制結果。
format方法format方法根據格式字符串格式化多個參數,格式字符串由嵌入格式說明符的靜態文本組成,除格式說明符外,格式字符串輸出不變。
格式字符串支持許多功能,在本教程中,我們將介紹一些基礎知識,有關完整說明,請參閱API規范中的格式字符串語法。
Root2示例使用單個format調用格式化兩個值:
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個字符的轉換結束,該轉換指定生成的格式化輸出類型,這里使用的三個轉換是:
d將整數值格式化為十進制值。
f將浮點值格式化為十進制值。
n輸出特定于平臺的行結束符。
以下是其他一些轉換:
x將整數格式化為十六進制值。
s將任何值格式化為字符串。
tB將整數格式化為特定于語言環境的月份名稱。
還有很多其他轉換。
除%%和%n外,所有格式說明符必須匹配一個參數,如果不這樣做,則拋出異常。在Java編程語言中, 轉義符始終生成換行符(u000A),除非你特別需要換行符,否則請勿使用 ,要獲取本地平臺的正確行分隔符,請使用%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
附加元素都是可選的,下圖顯示了較長的說明符如何分解為元素。
元素必須按所示順序出現,從右側開始,可選元素是:
Precision,對于浮點值,這是格式化值的數學精度,對于s和其他常規轉換,這是格式化值的最大寬度,如有必要,該值將被截斷。
Width,格式化值的最小寬度,如有必要,將填充該值,默認情況下,該值使用空格填充。
Flags,指定其他格式選項,在Format示例中,+標志指定應始終使用符號格式化數字,0標志指定0是填充字符。其他標志包括 — (在右邊填充)和(帶有特定于語言環境的千位分隔符的格式號),請注意,某些標志不能與某些其他標志一起使用或與某些轉換一起使用。
Argument Index,參數索引允許你顯式匹配指定的參數,你還可以指定<以匹配與前一個說明符相同的參數,因此,這個例子可以寫為:System.out.format("%f, %<+020.10f %n", Math.PI);
上一篇:掃描 下一篇:命令行I/O文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/72963.html
Java? 教程 Java教程是為JDK 8編寫的,本頁面中描述的示例和實踐沒有利用在后續版本中引入的改進。 Java教程是希望使用Java編程語言創建應用程序的程序員的實用指南,其中包括數百個完整的工作示例和數十個課程,相關課程組被組織成教程。 覆蓋基礎知識的路徑 這些教程以書籍的形式提供,如Java教程,第六版,前往Amazon.com購買。 入門 介紹Java技術和安裝Java開發軟件并使用...
字符流 Java平臺使用Unicode約定存儲字符值,字符流I/O自動將此內部格式與本地字符集進行轉換,在Western語言環境中,本地字符集通常是ASCII的8位超集。 對于大多數應用程序,具有字符流的I/O并不比具有字節流的I/O復雜,使用流類完成的輸入和輸出會自動轉換為本地字符集和從本地字符集轉換,使用字符流代替字節流的程序會自動適應本地字符集并為國際化做了準備 — 所有這些都無需程序員的額...
緩沖流 到目前為止,我們看到的大多數示例都使用無緩沖的I/O,這意味著每個讀取或寫入請求都由底層操作系統直接處理,這可以使程序效率低得多,因為每個這樣的請求通常觸發磁盤訪問、網絡活動或一些相對昂貴的其他操作。 為了減少這種開銷,Java平臺實現了緩沖的I/O流,緩沖輸入流從稱為緩沖區的內存區讀取數據,僅當緩沖區為空時才調用原生輸入API,類似地,緩沖輸出流將數據寫入緩沖區,并且僅在緩沖區已滿時才調...
掃描 編程I/O通常涉及轉換人們喜歡使用的整齊格式的數據,為了幫助你完成這些工作,Java平臺提供了兩個API,掃描器API將輸入分解為與數據位相關聯的單個標記,格式化API將數據組裝成格式良好、可讀的形式。 Scanner類型的對象對于將格式化輸入分解為標記并根據其數據類型轉換單個標記非常有用。 將輸入分解為標記 默認情況下,掃描器使用空格分隔標記(空格字符包括空格、制表符和行終止符,有關完整列...
命令行I/O 程序通常從命令行運行,并在命令行環境中與用戶交互,Java平臺以兩種方式支持這種交互:通過標準流和控制臺。 標準流 標準流是許多操作系統的一個特性,默認情況下,它們從鍵盤讀取輸入并將輸出寫入顯示器,它們還支持文件和程序之間的I/O,但該功能由命令行解釋器控制,而不是程序。 Java平臺支持三種標準流:標準輸入,可通過System.in訪問;標準輸出,可通過System.out訪問;和...
閱讀 1113·2021-11-23 09:51
閱讀 1080·2021-10-18 13:31
閱讀 2979·2021-09-22 16:06
閱讀 4278·2021-09-10 11:19
閱讀 2204·2019-08-29 17:04
閱讀 432·2019-08-29 10:55
閱讀 2482·2019-08-26 16:37
閱讀 3379·2019-08-26 13:29