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