Java中Scanner類使用保姆級(jí)教程
一、Scanner類簡(jiǎn)介
Scanner類是在jdk1.5版本引入的,它在java的util工具包下,主要用于掃描用戶從控制臺(tái)輸入的文本。
當(dāng)我們需要通過控制臺(tái)輸入數(shù)據(jù)時(shí),只需要事先導(dǎo)入java.util包中的Scanner類,然后調(diào)用Scanner類,我們的程序就能獲取我們?cè)诳刂婆_(tái)所輸入的數(shù)據(jù)了。
二、如何使用Scanner類
1、首先導(dǎo)入java.util.Scanner包;
import java.util.Scanner;
2、創(chuàng)建Scanner類對(duì)象
Scanner sc = new Scanner(System.in);
3、創(chuàng)建一個(gè)變量來接收輸入的數(shù)據(jù)
//運(yùn)用上面創(chuàng)建的sc對(duì)象調(diào)用對(duì)應(yīng)的方法,控制臺(tái)即可等待用戶輸入,我們自定義一個(gè)變量來接收即可 //我們想要輸入的數(shù)據(jù)類型不同,也需要調(diào)用不同的方法,具體應(yīng)用如下: String str = sc.nextLine(); String str = sc.next(); byte a1= sc.nextByte(); short a2= sc.nextShort(); int a3 = sc.nextInt(); long a4 = sc.nextLong(); float a5 = sc.nextFloat(); double a6 = sc.nextDouble(); boolean a7 = sc.nextBoolean();
4、關(guān)閉Scanner類
//使用完Scanner后,我們一定要記得將它關(guān)閉! //因?yàn)槭褂肧canner本質(zhì)上是打開了一個(gè)IO流,如果不關(guān)閉的話,它將會(huì)一直占用系統(tǒng)資源。 sc.close(); //但是注意一旦你關(guān)閉后,就算在sc.close()這行代碼后你再重新new Scanner(System.in),那也不能重新再打開一個(gè)掃描器了,如下圖會(huì)發(fā)現(xiàn)程序會(huì)報(bào)錯(cuò) //所以大家一定要在用不到掃描器之后再關(guān)閉,即把sc.close()代碼放到最后。
三、next()和nextLine()的區(qū)別(很重要)
從上面的講解,我們會(huì)發(fā)現(xiàn)當(dāng)我們想要輸入的數(shù)據(jù)類型是String時(shí),我們有兩個(gè)方法可以調(diào)用:next()和nextLine()。那這兩種方法具體有什么區(qū)別呢?我們繼續(xù)往下看:
(1)我們先來測(cè)試一下next():
使用多組測(cè)試用例測(cè)試后,分析輸出結(jié)果不難得出以下結(jié)論(這里只貼了經(jīng)典測(cè)試案例,其他的大家可以自行測(cè)試):
next()方法在識(shí)別輸入的字符串時(shí),不能得到我們輸入的帶有空格的字符串,只是讀取到了hello。
這說明next()在讀取到有效字符之后會(huì)以空格作為自己的讀取結(jié)束標(biāo)識(shí)符,因?yàn)槲覀兛梢园l(fā)現(xiàn)hello前面的空格并沒有影響到方法的讀取。所以next()用法總結(jié)如下:
next()用法總結(jié):
1. 一定要讀取到有效字符后才可以結(jié)束輸入。
2. 對(duì)輸入的有效字符之前所遇到的空白,會(huì)自動(dòng)將其去除。
3. 只有輸入的有效字符后才將其后面輸入的空白作為結(jié)束符。
4. next()不能得到帶有空格的字符串。
5. 讀取結(jié)束后,該方法會(huì)將我們的鼠標(biāo)定位在我們輸入數(shù)據(jù)的那一行。
(2)再來測(cè)試一下nextLine():
分析結(jié)果發(fā)現(xiàn),輸入結(jié)果與輸入結(jié)果完全一致,nextLine()并沒有被字符串中間的空格影響讀取結(jié)果。
這是因?yàn)樵摲椒ㄒ缘氖腔剀嚪ㄒ簿褪俏覀冩I盤的enter鍵)作為結(jié)束標(biāo)識(shí)符。
nextLine()用法總結(jié):
1、以回車符作為結(jié)束標(biāo)識(shí)符,獲取到的是回車符前輸入的所有字符串(包括空格)。
2、讀取結(jié)束后,該方法會(huì)將我們的鼠標(biāo)定位在我們輸入數(shù)據(jù)的那一行的下一行。
(3)先使用nextLine再使用next()、nextInt()等沒問題,但是先使用next()和nextInt()等之后就不可以再緊跟nextLine使用。(這一點(diǎn)很重要?。。。?/h3>
這是因?yàn)閚ext()等這些方法讀取結(jié)束后會(huì)緊跟一個(gè)回車符,而nextLine會(huì)直接讀取到這個(gè)回車符,這就導(dǎo)致出現(xiàn)我們還沒有來得及輸入我們想要輸入的數(shù)據(jù),nextLine就以為我們已經(jīng)輸入完了這樣的情況!
解決辦法也很簡(jiǎn)單:我們直接在next()使用后加兩個(gè)nextLine()就OK了,這樣第一個(gè)nextLine()就會(huì)當(dāng)一個(gè)‘替死鬼’,第二個(gè)nextLine()我們就可以輸入自己想要輸入的數(shù)據(jù)啦!
四、hash×××()的簡(jiǎn)單使用
我們發(fā)現(xiàn)Scanner類的實(shí)例變量還會(huì)有以hash開頭的一系列方法,那這些方法是干什么的呢?
我們直接上測(cè)試用例,大家直觀體會(huì):
五、Scanner方法匯總
該圖的意思其實(shí)就是,比如:nextlnt():只能讀取int值,用戶如果輸入了其他非整型的數(shù)據(jù),程序就會(huì)報(bào)錯(cuò)。
其他的如nextByte()、nextDouble()也是以此類推,只能讀取符合該類型的數(shù)據(jù),所以我們要根據(jù)我們輸入的數(shù)據(jù)來匹配對(duì)應(yīng)的方法。
總結(jié)
到此這篇關(guān)于Java中Scanner類使用保姆級(jí)教程的文章就介紹到這了,更多相關(guān)Java Scanner類使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring MVC實(shí)現(xiàn)文件上傳及優(yōu)化案例解析
本文介紹如何在SpringMVC框架中實(shí)現(xiàn)文件上傳和異步登錄功能,通過添加必要的依賴和配置,創(chuàng)建文件上傳頁(yè)面和控制器,實(shí)現(xiàn)文件上傳到指定文件夾,同時(shí),展示了如何使用AJAX實(shí)現(xiàn)局部刷新的異步登錄,優(yōu)化用戶體驗(yàn),詳細(xì)步驟包括配置springmvc.xml、編寫前端頁(yè)面和控制器等2024-10-10Java?Spring?boot?配置JDK和MAVEN開發(fā)環(huán)境的過程
本文詳細(xì)介紹了如何配置JDK和Maven環(huán)境,包括JDK的安裝與環(huán)境變量設(shè)置,Maven的下載、配置環(huán)境變量和設(shè)置阿里云倉(cāng)庫(kù),最后簡(jiǎn)述了在IntelliJ?IDEA中配置JDK和Maven的步驟,本教程適合Java開發(fā)新手進(jìn)行開發(fā)環(huán)境的搭建,確保順利進(jìn)行Java項(xiàng)目的開發(fā)2024-11-11LocalDateTime日期時(shí)間格式中間多了一個(gè)T的問題及解決
這篇文章主要介紹了LocalDateTime日期時(shí)間格式中間多了一個(gè)T的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03小議Java中final關(guān)鍵字使用時(shí)的注意點(diǎn)
final關(guān)鍵字代表著最后、不可改變,無論是在用final修飾類、修飾方法還是修飾變量時(shí),都要注意內(nèi)存分配的問題.這里來小議Java中final關(guān)鍵字使用時(shí)的注意點(diǎn):2016-06-06