Java中Scanner類與BufferReader類的不同點(diǎn)(非常詳細(xì))
java.util.Scanner類是一個(gè)簡(jiǎn)單的文本掃描類,它可以解析基本數(shù)據(jù)類型和字符串。它本質(zhì)上是使用正則表達(dá)式去讀取不同的數(shù)據(jù)類型。
Java.io.BufferedReader類為了能夠高效的讀取字符序列,從字符輸入流和字符緩沖區(qū)讀取文本。
下面是兩個(gè)類的不同之處:
當(dāng)nextLine()被用在nextXXX()之后,用Scanner類有什么問(wèn)題
嘗試去猜測(cè)下面代碼的輸出內(nèi)容;
// Code using Scanner Class import java.util.Scanner; class Differ { public static void main(String args[]) { Scanner scn = new Scanner(System.in); System.out.println("Enter an integer"); int a = scn.nextInt(); System.out.println("Enter a String"); String b = scn.nextLine(); System.out.printf("You have entered:- " + a + " " + "and name as " + b); } }
Input:
50
Geek
Output:
Enter an integer
Enter a String
You have entered:- 50 and name as
讓我們嘗試使用BufferReader類,并且使用相同的輸入
// Code using BufferedReader Class import java.io.*; class Differ { public static void main(String args[]) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Enter an integer"); int a = Integer.parseInt(br.readLine()); System.out.println("Enter a String"); String b = br.readLine(); System.out.printf("You have entered:- " + a + " and name as " + b); } }
Input:
50
Geek
Output:
Enter an integer
Enter a String
you have entered:- 50 and name as Geek
在Scanner類中如果我們?cè)谶@任何7個(gè)nextXXX()方法之后調(diào)用nextLine()方法,這nextLine()方法不能夠從控制臺(tái)讀取任何內(nèi)容,并且,這游標(biāo)不會(huì)進(jìn)入控制臺(tái),它將跳過(guò)這一步。這nextXXX()方法是這些方法,nextInt(),nextFloat(), nextByte(), nextShort(), nextDouble(), nextLong(), next()。
在BufferReader類中就沒(méi)有那種問(wèn)題。這種問(wèn)題僅僅出現(xiàn)在Scanner類中,由于nextXXX()方法忽略***換行符***,但是,nextLine()并不忽略它。如果我們?cè)趎extXXX()方法和nextLine()方法之間使用超過(guò)一個(gè)以上的nextLine()方法,這個(gè)問(wèn)題將不會(huì)出現(xiàn)了;因?yàn)閚extLine()把換行符消耗了??梢詤⒖歼@個(gè)程序的正確寫法(http://code.geeksforgeeks.org/CErAhD)。這個(gè)問(wèn)題和C/C++(http://www.geeksforgeeks.org/problem-with-scanf-when-there-is-fgetsgetsscanf-after-it/)中的scanf()方法緊跟gets()方法的問(wèn)題一樣。
其他的不同點(diǎn):
•BufferedReader是支持同步的,而Scanner不支持。如果我們處理多線程程序,BufferedReader應(yīng)當(dāng)使用。
•BufferedReader相對(duì)于Scanner有足夠大的緩沖區(qū)內(nèi)存。
•Scanner有很少的緩沖區(qū)(1KB字符緩沖)相對(duì)于BufferedReader(8KB字節(jié)緩沖),但是這是綽綽有余的。
•BufferedReader相對(duì)于Scanner來(lái)說(shuō)要快一點(diǎn),因?yàn)镾canner對(duì)輸入數(shù)據(jù)進(jìn)行類解析,而BufferedReader只是簡(jiǎn)單地讀取字符序列。
以上所述是小編給大家介紹的Java中Scanner類與BufferReader類的不同點(diǎn)(非常詳細(xì)),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Linux 下通過(guò) java 命令啟動(dòng) jar 包常見(jiàn)方式小結(jié)
這篇文章主要介紹了Linux 下通過(guò) java 命令啟動(dòng) jar 包常見(jiàn)方式小結(jié),后臺(tái)啟動(dòng)jar包命令大致有五種,每種方式結(jié)合代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2023-12-12springBoot 過(guò)濾器去除請(qǐng)求參數(shù)前后空格實(shí)例詳解
這篇文章主要為大家介紹了springBoot 過(guò)濾器去除請(qǐng)求參數(shù)前后空格實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11Java數(shù)組與堆棧相關(guān)知識(shí)總結(jié)
今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著Java數(shù)組與堆棧展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06聊一聊SpringBoot服務(wù)監(jiān)控機(jī)制
這篇文章主要介紹了聊一聊SpringBoot服務(wù)監(jiān)控機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04java數(shù)據(jù)類型和運(yùn)算符的深入講解
這篇文章主要給大家介紹了關(guān)于java數(shù)據(jù)類型和運(yùn)算符的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Spring JPA聯(lián)表查詢之OneToMany源碼解析
這篇文章主要為大家介紹了Spring JPA聯(lián)表查詢之OneToMany源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04