国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Java中BufferedReader與Scanner讀入的區(qū)別詳解

Java中BufferedReader與Scanner讀入的區(qū)別詳解

2022-03-07 00:53知行流浪 Java教程

這篇文章主要介紹了Java中BufferedReader與Scanner讀入的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

java.util.Scanner類(lèi)是一個(gè)簡(jiǎn)單的文本掃描類(lèi),它可以解析基本數(shù)據(jù)類(lèi)型和字符串。它本質(zhì)上是使用正則表達(dá)式去讀取不同的數(shù)據(jù)類(lèi)型。

Java.io.BufferedReader類(lèi)為了能夠高效的讀取字符序列,從字符輸入流和字符緩沖區(qū)讀取文本。

在Java中,我們都知道Java的標(biāo)準(zhǔn)輸入串是System.in。但是我們卻很少在Java中看到誰(shuí)使用它,這是因?yàn)槲覀兤綍r(shí)輸入的都是一個(gè)字符串或者是一個(gè)數(shù)字等等。而System.in提供的read方法是通過(guò)字節(jié)來(lái)讀取數(shù)據(jù)的,所以對(duì)我們來(lái)說(shuō)不方便處理!

Scanner

在Java SE6提供了一個(gè)非常方便的輸入數(shù)據(jù)的類(lèi)Scanner,位于java.util包中,這個(gè)Scanner的具體用法為Scanner in = new Scanner(System.in)。

通過(guò)new創(chuàng)建一個(gè)Scanner對(duì)象,Scanner需要傳入一個(gè)System.in作為參數(shù),這個(gè)我們可以看作是Scanner通過(guò)其內(nèi)部機(jī)制將System.in包裝起來(lái)而實(shí)現(xiàn)數(shù)據(jù)的讀取工作的。

Scanner對(duì)象通過(guò)一系列的in.nextXxx();方法來(lái)讀取相應(yīng)的基本類(lèi)型的數(shù)據(jù),通過(guò)in.hasNextXxx();方法來(lái)判斷是否還有下一個(gè)數(shù)據(jù)。

然而,Scanner讀取數(shù)據(jù)是按空格符(這其中包括空格鍵,Tab鍵,Enter鍵)來(lái)分割數(shù)據(jù)的。

只要遇到其中之一,Scanner的方法就會(huì)返回下一個(gè)輸入(當(dāng)然nextLine()方法的結(jié)束符為換行符,它會(huì)返回?fù)Q行符之前的數(shù)據(jù)),這也就是我們會(huì)面臨的另一個(gè)問(wèn)題,當(dāng)我們的輸入數(shù)據(jù)中有空格時(shí),我們就不會(huì)得到我們想要的數(shù)據(jù),這樣我們就要考慮到BufferReader來(lái)讀取數(shù)據(jù)!

BufferReader

BufferReader位于java.io包中,使用BufferReader就相對(duì)來(lái)說(shuō)沒(méi)有那么多方法來(lái)讓你選擇!讀取數(shù)據(jù)比較固定,這樣格式也就相對(duì)來(lái)說(shuō)比較單一,只要記住就這一讀取數(shù)據(jù)的方法。

?
1
BufferedReader br = new BufferedReader (newInputStreamReader(System.in));

這個(gè)BufferReader對(duì)象通過(guò)readLine();方法來(lái)讀取數(shù)據(jù),readLine()是按Enter回車(chē)來(lái)讀取一行數(shù)據(jù)的,只要在回車(chē)鍵之前的都會(huì)被readLine()方法返回。

readLine()方法返回的是字符串,因此要使用BufferReader輸入一些字符之外的類(lèi)型的數(shù)據(jù),就要相對(duì)比較麻煩,需要通過(guò)一些XXXX.parseXxx();來(lái)轉(zhuǎn)換相應(yīng)的數(shù)據(jù)類(lèi)型,(例如:int類(lèi)型的用Integer.parseInt(需要轉(zhuǎn)換的字符串))。

雖然麻煩一些,但通過(guò)BufferReader讀入的效率要比Scanner高一倍,這個(gè)差距可想而知,而且讀取的數(shù)據(jù)越多,效果就越明顯。

需要注意的是使用BufferedReader對(duì)象的readLine()方法必須處理java.io.IOException異常。

兩者的對(duì)比

1、Scanner提供了一系列nextXxx()方法,當(dāng)我們確定輸入的數(shù)據(jù)類(lèi)型時(shí),使用Scanner更加方便。也正是因?yàn)檫@個(gè)BufferedReader相對(duì)于Scanner來(lái)說(shuō)要快一點(diǎn),因?yàn)镾canner對(duì)輸入數(shù)據(jù)進(jìn)行類(lèi)解析,而B(niǎo)ufferedReader只是簡(jiǎn)單地讀取字符序列。

2、Scanner和BufferedReader都設(shè)置了緩沖區(qū),Scanner有很少的緩沖區(qū)(1KB字符緩沖)相對(duì)于BufferedReader(8KB字節(jié)緩沖),但是這是綽綽有余的。

3、BufferedReader是支持同步的,而Scanner不支持。如果我們處理多線程程序,BufferedReader應(yīng)當(dāng)使用。

4、Scanner輸入的一個(gè)問(wèn)題:在Scanner類(lèi)中如果我們?cè)谌魏?個(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類(lèi)中就沒(méi)有那種問(wèn)題。這種問(wèn)題僅僅出現(xiàn)在Scanner類(lèi)中,由于nextXXX()方法忽略換行符,但是nextLine()并不忽略它。如果我們?cè)趎extXXX()方法和nextLine()方法之間使用超過(guò)一個(gè)以上的nextLine()方法,這個(gè)問(wèn)題將不會(huì)出現(xiàn)了;因?yàn)閚extLine()把換行符消耗了。

程序示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package com.zxt.base;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
 
public classSystemInTest {
    private static Scanner sc;
    public static void main(String[] args) {
        // 使用Scanner輸入
        sc = new Scanner(System.in);
        int num1 = sc.nextInt();
        int num2 = sc.nextInt();
        System.out.println("num1 + num2 = "+ (num1+ num2));
 
        // 使用BufferReader輸入
        InputStreamReaderisr = newInputStreamReader(System.in);
        BufferedReaderbr = new BufferedReader(isr);
        try {
            int num3 = Integer.parseInt(br.readLine());
            int num4 = Integer.parseInt(br.readLine());
            System.out.println("num3 + num4 = "+ (num3+ num4));
 
        }catch(NumberFormatException | IOException e) {
            e.printStackTrace();
        }      
       
        // 使用Scanner輸入會(huì)遇到的問(wèn)題
        System.out.println();
        System.out.print("Enter an Integer:");
        int intValue = sc.nextInt();
        System.out.print("Enter a String:");
        StringstrValue = sc.nextLine();
        System.out.printf("You have entered intValue is " + intValue+ " and strValue is " + strValue);
       
        // 問(wèn)題原因:由于nextXXX()方法忽略換行符,但是nextLine()并不忽略它。所以如果我們?cè)趎extXXX()方法后面使用nextLine()將會(huì)出現(xiàn)問(wèn)題
        // 解決方案是:在使用nextXXX()方法后,在使用nextLine()讀取下一行數(shù)據(jù)前,多使用一個(gè)nextLine()用來(lái)消耗換行符
        // int intValue = sc.nextInt();
        // sc.nextLine();
        // String strValue = sc.nextLine();
       
        // 或者使用BufferReader不會(huì)出現(xiàn)該問(wèn)題
        System.out.println();
        try {
            System.out.print("Enter an Integer:");
            int intValue1 = Integer.parseInt(br.readLine());
            System.out.print("Enter a String:");
            StringstrValue1 = br.readLine();
            System.out.printf("You have entered intValue1 is " + intValue1+ " and strValue1 is " + strValue1);
           
        }catch(NumberFormatException | IOException e) {
            e.printStackTrace();
        }
    }
}

Java中BufferedReader與Scanner讀入的區(qū)別詳解

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/zengxiantao1994/article/details/78056243

延伸 · 閱讀

精彩推薦
  • Java教程詳解shiro緩存機(jī)制

    詳解shiro緩存機(jī)制

    Shiro提供了類(lèi)似于Spring的Cache抽象,即Shiro本身不實(shí)現(xiàn)Cache,但是對(duì)Cache進(jìn)行了又抽象,方便更換不同的底層Cache實(shí)現(xiàn)。下面通過(guò)實(shí)例代碼給大家分享shiro緩存...

    動(dòng)力節(jié)點(diǎn)9032021-01-06
  • Java教程Mybatis查不到數(shù)據(jù)查詢返回Null問(wèn)題

    Mybatis查不到數(shù)據(jù)查詢返回Null問(wèn)題

    mybatis突然查不到數(shù)據(jù),查詢返回的都是Null,但是 select count(*) from xxx查詢數(shù)量,返回卻是正常的。好多朋友遇到這樣的問(wèn)題不知所措,下面小編通過(guò)本教程...

    digdeep4992020-06-07
  • Java教程SpringData @Query和@Modifying注解原理解析

    SpringData @Query和@Modifying注解原理解析

    這篇文章主要介紹了SpringData @Query和@Modifying注解原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友...

    IT-執(zhí)念5372020-08-27
  • Java教程Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(40)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(40)

    下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以...

    牛哄哄的柯南12322021-10-22
  • Java教程Java編程簡(jiǎn)單應(yīng)用

    Java編程簡(jiǎn)單應(yīng)用

    本文主要介紹了三個(gè)簡(jiǎn)單Java小程序———1、HelloWorld(HelloWorld的來(lái)源);2、輸出個(gè)人信息3、輸出特殊圖案。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下...

    瘋狂的牛5472020-08-12
  • Java教程Spring Boot參數(shù)校驗(yàn)及分組校驗(yàn)的使用教程

    Spring Boot參數(shù)校驗(yàn)及分組校驗(yàn)的使用教程

    在日常的開(kāi)發(fā)中,參數(shù)校驗(yàn)是非常重要的一個(gè)環(huán)節(jié),嚴(yán)格參數(shù)校驗(yàn)會(huì)減少很多出bug的概率,增加接口的安全性,下面這篇文章主要給大家介紹了關(guān)于Spring Boot參數(shù)...

    江巖9842021-11-12
  • Java教程Spring工廠方法創(chuàng)建(實(shí)例化)bean實(shí)例代碼

    Spring工廠方法創(chuàng)建(實(shí)例化)bean實(shí)例代碼

    這篇文章主要介紹了Spring工廠方法創(chuàng)建bean實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下...

    duanxz9992021-03-17
  • Java教程Java中關(guān)于線程安全的三種解決方式

    Java中關(guān)于線程安全的三種解決方式

    這篇文章主要介紹了Java中關(guān)于線程安全的三種解決方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考...

    威斯布魯克.猩猩10702021-12-30
主站蜘蛛池模板: 国产精品成人av | 精品欧美乱码久久久久久1区2区 | 狠狠影院| 高清国产一区二区三区四区五区 | 精品久久国产老人久久综合 | 一本大道久久a久久精品综合1 | 91久久久久久久久久久 | 欧美在线一区二区三区 | 亚洲国产精品久久久久婷婷老年 | 日韩免费高清视频 | 欧美成人h版在线观看 | 精品96久久久久久中文字幕无 | 伊人网在线视频观看 | 一区中文字幕 | 日韩电影在线 | 午夜影院a | 精品国产青草久久久久福利 | 性欧美成人播放77777 | www.久| 三区视频 | 在线观看不卡 | 午夜视频一区二区三区 | 婷婷综合色 | 在线a人片免费观看视频 | 国内精品视频在线观看 | 色婷婷电影 | 欧美一级一区 | 毛片免费电影 | 欧美a级网站 | 在线观看中文字幕亚洲 | 亚洲人天堂 | 91视频进入| 国产高清视频一区 | 免费看国产片在线观看 | 亚洲人视频在线观看 | 1区2区视频| 国产福利一区二区三区视频 | 午夜免费视频网站 | 成年人在线视频 | 国产精品亚洲第一区在线暖暖韩国 | 日韩一区二区视频在线 |