掃描
編程I/O通常涉及轉(zhuǎn)換人們喜歡使用的整齊格式的數(shù)據(jù),為了幫助你完成這些工作,Java平臺提供了兩個API,掃描器API將輸入分解為與數(shù)據(jù)位相關(guān)聯(lián)的單個標(biāo)記,格式化API將數(shù)據(jù)組裝成格式良好、可讀的形式。
Scanner類型的對象對于將格式化輸入分解為標(biāo)記并根據(jù)其數(shù)據(jù)類型轉(zhuǎn)換單個標(biāo)記非常有用。
將輸入分解為標(biāo)記默認(rèn)情況下,掃描器使用空格分隔標(biāo)記(空格字符包括空格、制表符和行終止符,有關(guān)完整列表,請參閱Character.isWhitespace的文檔),要了解掃描的工作原理,讓我們看看ScanXan,這是一個讀取xanadu.txt中單個單詞并打印出來的程序,每行一個單詞。
import java.io.*; import java.util.Scanner; public class ScanXan { public static void main(String[] args) throws IOException { Scanner s = null; try { s = new Scanner(new BufferedReader(new FileReader("xanadu.txt"))); while (s.hasNext()) { System.out.println(s.next()); } } finally { if (s != null) { s.close(); } } } }
請注意,ScanXan在使用掃描器對象完成后會調(diào)用Scanner的close方法,即使掃描器不是流,你也需要將其關(guān)閉以指示你已完成其底層流。
ScanXan的輸出如下所示:
In Xanadu did Kubla Khan A stately pleasure-dome ...
要使用其他標(biāo)記分隔符,請調(diào)用useDelimiter(),指定正則表達(dá)式,例如,假設(shè)你希望標(biāo)記分隔符為逗號,可選地后跟空格,你會調(diào)用:
s.useDelimiter(",s*");轉(zhuǎn)換單個標(biāo)記
ScanXan示例將所有輸入標(biāo)記視為簡單的String值,Scanner還支持所有Java語言的原始類型(char除外)的標(biāo)記,以及BigInteger和BigDecimal,此外,數(shù)值可以使用數(shù)千個分隔符。因此,在美國語言環(huán)境中,Scanner將字符串“32,767”正確地讀取為一個整數(shù)值。
我們必須提到語言環(huán)境,因為千位分隔符和小數(shù)符號是特定于語言環(huán)境的,因此,如果我們未指定掃描器應(yīng)使用美國語言環(huán)境,則以下示例將無法在所有語言環(huán)境中正常運(yùn)行。這通常不必?fù)?dān)心,因為你的輸入數(shù)據(jù)通常來自使用相同語言環(huán)境的源,但是這個例子是Java教程的一部分,并且分布在世界各地。
ScanSum示例讀取double值列表并將其相加,這是源碼:
import java.io.FileReader; import java.io.BufferedReader; import java.io.IOException; import java.util.Scanner; import java.util.Locale; public class ScanSum { public static void main(String[] args) throws IOException { Scanner s = null; double sum = 0; try { s = new Scanner(new BufferedReader(new FileReader("usnumbers.txt"))); s.useLocale(Locale.US); while (s.hasNext()) { if (s.hasNextDouble()) { sum += s.nextDouble(); } else { s.next(); } } } finally { s.close(); } System.out.println(sum); } }
這是示例輸入文件usnumbers.txt。
8.5 32,767 3.14159 1,000,000.1
輸出字符串是“1032778.74159”,在某些語言環(huán)境中,句點(diǎn)將是不同的字符,因為System.out是PrintStream對象,并且該類不提供重寫默認(rèn)語言環(huán)境的方法,我們可以覆蓋整個程序的語言環(huán)境 — 或者我們可以只使用格式化,如下一個主題格式化中所述。
上一篇:緩沖流 下一篇:格式化流文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72964.html
摘要:典型示例以下結(jié)構(gòu)是比較推薦的組織方式,所有的類和其他都在之下。應(yīng)用主類,該類直接位于下。默認(rèn)情況下,的應(yīng)用主類會自動掃描以及所有子包下的所有類來進(jìn)行初始化。 Spring Boot框架本身并沒有對工程結(jié)構(gòu)有特別的要求,但是按照最佳實(shí)踐的工程結(jié)構(gòu)可以幫助我們減少可能會遇見的坑,尤其是Spring包掃描機(jī)制的存在,如果您使用最佳實(shí)踐的工程結(jié)構(gòu),可以免去不少特殊的配置工作。 典型示例 以下結(jié)...
摘要:剛開始學(xué)習(xí)的時候,可能是一頭霧水,不知道從何學(xué)起。這個教程總體來說就像列文虎克教學(xué),細(xì)到極致,妙到毫巔。適合絕對零基礎(chǔ)的,每個知識點(diǎn)掰開了揉碎了講解。 剛開始學(xué)習(xí)java的時候,可能是一頭霧水,不知道從何學(xué)起。還有很多Java小白,在剛自學(xué)Java的時候玩命的學(xué)習(xí),玩命的記住Java原理,天天早上五點(diǎn)起床背Java的一些英...
摘要:一背景筆者月份在慕課網(wǎng)錄制視頻教程跨站漏洞加強(qiáng)安全里面需要講到很多實(shí)戰(zhàn)案例,在漏洞挖掘案例中分為了手工挖掘工具挖掘代碼審計三部分內(nèi)容手工挖掘篇參考地址為快速找出網(wǎng)站中可能存在的漏洞實(shí)踐一本文主要記錄利用安全工具進(jìn)行漏洞挖掘部分,分為了設(shè)置代 一、背景 筆者6月份在慕課網(wǎng)錄制視頻教程XSS跨站漏洞 加強(qiáng)Web安全,里面需要講到很多實(shí)戰(zhàn)案例,在漏洞挖掘案例中分為了手工挖掘、工具挖掘、代碼審...
摘要:咱媽說別亂點(diǎn)鏈接之淺談攻擊閱讀掘金作者馬達(dá)編輯迷鹿馬達(dá),精通開發(fā)開發(fā),擅長接口設(shè)計以及平臺化建設(shè),獨(dú)自主導(dǎo)過多個產(chǎn)品。一題目購物應(yīng)用分環(huán)境要求安全學(xué)習(xí)資料匯總掘金安全學(xué)習(xí)資料匯總安全學(xué)習(xí)網(wǎng)站收集 咱媽說別亂點(diǎn)鏈接之淺談 CSRF 攻擊 - 閱讀 - 掘金作者 | 馬達(dá)編輯 | 迷鹿 馬達(dá), 精通PHP開發(fā)、Web開發(fā),擅長api接口設(shè)計以及平臺化建設(shè),獨(dú)自主導(dǎo)過多個Web產(chǎn)品。目前就職...
閱讀 2137·2021-11-22 15:24
閱讀 2433·2021-09-09 11:53
閱讀 3049·2021-09-04 16:40
閱讀 1648·2019-08-30 15:52
閱讀 3367·2019-08-29 13:47
閱讀 2749·2019-08-26 17:40
閱讀 1561·2019-08-26 13:24
閱讀 2256·2019-08-26 12:01