欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java鍵盤(pán)錄入Scanner類(lèi)的使用方法詳析

 更新時(shí)間:2024年09月25日 09:47:58   作者:王哪跑nn  
在Java編程中,引用數(shù)據(jù)類(lèi)型是用來(lái)存儲(chǔ)對(duì)象的引用(地址),而Scanner類(lèi)是引用數(shù)據(jù)類(lèi)型的一種,用于讀取輸入數(shù)據(jù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

引言

我們要學(xué)的Scanner類(lèi)是屬于引用數(shù)據(jù)類(lèi)型,我們先了解下引用數(shù)據(jù)類(lèi)型。

引用數(shù)據(jù)類(lèi)型的使用

與定義基本數(shù)據(jù)類(lèi)型變量不同,引用數(shù)據(jù)類(lèi)型的變量定義及賦值有一個(gè)相對(duì)固定的步驟或格式。

數(shù)據(jù)類(lèi)型 變量名 = new 數(shù)據(jù)類(lèi)型();

每種引用數(shù)據(jù)類(lèi)型都有其功能,我們可以調(diào)用該類(lèi)型實(shí)例的功能。

變量名.方法名();

1. Scanner類(lèi)的介紹

Scanner類(lèi)是一個(gè)用于掃描輸入文本的新的實(shí)用程序。

Scanner類(lèi)是引用數(shù)據(jù)類(lèi)型的一種,我們可以使用該類(lèi)來(lái)完成用戶鍵盤(pán)錄入,獲取到錄入的數(shù)據(jù)。

2. Scanner使用步驟:

導(dǎo)包:import java.util.Scanner;
創(chuàng)建對(duì)象實(shí)例:Scanner sc = new Scanner(System.in);
調(diào)用方法:
                int  i = sc.nextInt(); 用來(lái)接收控制臺(tái)錄入的數(shù)字
                String s = sc.next(); 用來(lái)接收控制臺(tái)錄入的字符串

 示例

package com.doit.day0217;

import java.util.Scanner;

/**
 * @日期: 2024/4/13
 * @Author: Wang NaPao
 * @Blog: https://blog.csdn.net/weixin_40968325?spm=1018.2226.3001.5343
 * @Tips: 和我一起學(xué)習(xí)吧
 * @Description:
 */

public class Test10 {
    public static void main(String[] args) {
        //創(chuàng)建Scanner引用類(lèi)型的變量
        Scanner sc = new Scanner(System.in);
        //獲取數(shù)字
        System.out.println("請(qǐng)輸入一個(gè)數(shù)字");
        int n=sc.nextInt();
        System.out.println("n的值為"+n);
        //獲取字符串
        System.out.println("請(qǐng)輸入一個(gè)字符串");
        String str=sc.next();
        System.out.println("str的值為"+str);
    }
}

3. Scanner類(lèi)的各種數(shù)據(jù)類(lèi)型

使用nextByte()、nextDouble()、nextFloat()、nextInt()、nextLong()、nextShort();

上述方法包括next和nextLine執(zhí)行時(shí)都會(huì)造成堵塞,等待用戶在命令行輸入數(shù)據(jù)回車(chē)確認(rèn)。

使用這些方法可以讀取對(duì)應(yīng)的數(shù)據(jù)類(lèi)型直到空格,并且只讀對(duì)應(yīng)的數(shù)據(jù)類(lèi)型,輸入其他類(lèi)型的值會(huì)報(bào)InputMismatchException異常。

4. 關(guān)閉Scanner類(lèi)

使用完Scanner后,我們一定要記得將它關(guān)閉!

因?yàn)槭褂肧canner本質(zhì)上是打開(kāi)了一個(gè)IO流,如果不關(guān)閉的話,它將會(huì)一直占用系統(tǒng)資源。

但是注意一旦你關(guān)閉后,就算在sc.close()這行代碼后你再重新new Scanner(System.in),那也不能重新再打開(kāi)一個(gè)掃描器了,如下圖發(fā)現(xiàn)程序會(huì)報(bào)錯(cuò)

所以大家一定要在用不到掃描器之后再關(guān)閉,即把sc.close()代碼放到最后。

package Day1108;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);//讀入
        System.out.println("請(qǐng)輸入一個(gè)整數(shù)");
        BigInteger bi=sc.nextBigInteger();//讀入一個(gè)Integer
        System.out.println("bi="+bi);

        sc.close();
        Scanner sc1=new Scanner(System.in);
        System.out.println("請(qǐng)輸入一個(gè)整數(shù)");
        BigInteger bi1=sc.nextBigInteger();//讀入一個(gè)Integer
        System.out.println("bi1="+bi1);
    }
}

 結(jié)果

5. next()和nextLine()的區(qū)別

從上面的講解,我們會(huì)發(fā)現(xiàn)當(dāng)我們想要輸入的數(shù)據(jù)是String類(lèi)型時(shí),我們有兩個(gè)方法可以調(diào)用,next()和nextLine().

那這兩種方法具體有什么區(qū)別呢?

1)我們先來(lái)測(cè)試一下next():

package Day1108;

import java.util.Scanner;

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);//讀入
        String s=sc.next();
        System.out.println(s);
    }
}

 結(jié)果:

從結(jié)果可以看出:

next()方法再識(shí)別輸入的字符串時(shí),不能得到我們輸入的帶有空格的字符串,只是讀取到了Hello.

這說(shuō)明next()在讀取到有效字符之后會(huì)以空格作為自己的讀取結(jié)束標(biāo)識(shí)符,因?yàn)槲覀兛梢园l(fā)現(xiàn)Hello前面的空格并沒(méi)有影響到方法的讀取。

所以next()用法總結(jié)如下:

  • 一定要讀取到有效字符之后才可以結(jié)束輸入

  • 對(duì)輸入的有效字符后才能將其后面的輸入的空白作為結(jié)束符

  • 只有輸入的有效字符后才將其后面輸入的空白作為結(jié)束符

  • next()不能得到帶有空格的字符串

  • 讀取結(jié)束后,該方法會(huì)將我們的鼠標(biāo)定位在我們輸入數(shù)據(jù)的那一行。

2)我們?cè)賮?lái)測(cè)試一下nextLine() 

package Day1108;

import java.util.Scanner;

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);//讀入
        String s=sc.nextLine();
        System.out.println(s);
    }
}

 結(jié)果

分析結(jié)果發(fā)現(xiàn),輸出結(jié)果與輸入結(jié)果完全一致,nextLine()并沒(méi)有被字符串中間的空格影響讀取結(jié)果。

這是因?yàn)樵摲椒ㄒ缘氖腔剀?chē)符(也就是我們鍵盤(pán)的enter鍵)作為結(jié)束標(biāo)識(shí)符。

所以nextLine()用法總結(jié):

  • 以回車(chē)符作為結(jié)束標(biāo)識(shí)符,獲取到的是回車(chē)符前面輸入的所有字符串(包括空格)

  • 讀取結(jié)束后,該方法會(huì)將我們的鼠標(biāo)定位在我們輸入數(shù)據(jù)的那一行的下一行。

6. hasNext和hasNextLine的區(qū)別

二者都是用于判斷"有無(wú)鍵盤(pán)輸入”的,有則返回true,沒(méi)有則阻塞!

一定記住是阻塞而不是返回false,很多人都說(shuō)是返回false,但你查源碼會(huì)發(fā)現(xiàn)是不會(huì)返回false的,他會(huì)讓你一直阻塞在判斷階段,二者只是在細(xì)節(jié)上有不同。

  • hasNext()方法會(huì)判斷接下來(lái)是否有非空字符,如果有,則返回true,沒(méi)有則阻塞。例如一直敲回車(chē)相當(dāng)于一直判斷為空字符,但是不會(huì)返回fasle,而是一直阻塞在判斷階段,直到你輸入了非空字符。

  • hasNextLine()方法會(huì)根據(jù)行匹配模式取判斷接下來(lái)是否有一行(包括空行),如果有,則返回true.這個(gè)沒(méi)什么特別的,只要是你巧了回車(chē)那都是true并且不會(huì)阻塞。

??實(shí)例1 

package Day1108;

import day1107.DemoTest07;

import java.util.Scanner;

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);
        System.out.println(sc.hasNext());
    }
}

 結(jié)果:(按了很多個(gè)換行也無(wú)法結(jié)束,處于阻塞階段)

??實(shí)例2: 

package Day1108;

import day1107.DemoTest07;

import java.util.Scanner;

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);
        System.out.println(sc.hasNextLine());

    }
}

結(jié)果:

(直接按回車(chē)鍵也會(huì)為true)

總結(jié):

  • next()方法不能錄入空格,在特定情況下會(huì)把空格當(dāng)作回車(chē),nextLine方法可以錄入空格

  • hasNext()和hasNextLine的返回值都是boolean類(lèi)型,但只有可能返回true,不可能返回false,并且都默認(rèn)以回車(chē)鍵為結(jié)束符(hasNext可以設(shè)置為任意符號(hào)位結(jié)束符,不在本文研究范圍之內(nèi))

  • hasNext、next不能直接識(shí)別luo,而hasNextLine和nextLine都可以之別裸回車(chē)。換句話講:對(duì)于不輸入符號(hào)而直接裸敲一個(gè)回車(chē)的操作,只有后兩個(gè)能識(shí)別到。

  • hasNext、hasNextLine在返回一個(gè)boolean類(lèi)型結(jié)果為true的同時(shí),會(huì)在堆空間中開(kāi)辟一塊專(zhuān)門(mén)用于存放剛剛輸入的字符串,用于下次next或者nextLine:即下次next或者nextLine不需要再?gòu)逆I盤(pán)輸入,相當(dāng)于系統(tǒng)自動(dòng)把剛剛輸入的字符串再原封不動(dòng)的輸入了一遍。同時(shí)這個(gè)存儲(chǔ)壽命=調(diào)用對(duì)象的壽命。

  • 對(duì)于hasNext來(lái)說(shuō),每次敲擊回車(chē)都相當(dāng)于在堆空間中開(kāi)辟一行,敲幾次回車(chē)就會(huì)直接給后續(xù)next、nextLine方法賦值幾次。

  • hasNext是線程阻塞的,對(duì)于hasNext來(lái)說(shuō),如果一直不輸入字符,反而一直敲回車(chē)的話,整個(gè)線程會(huì)卡在這個(gè)輸入的地方,直到有字符輸入。

因?yàn)閔asNext、hasNextLine與next、nextLine有2x2種組合方式,所以我們用4段代碼做4次實(shí)驗(yàn)就可以大體上了解它們的特性了。

1)hasNext和next組合

package Day1108;

import day1107.DemoTest07;

import java.util.Scanner;

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);
        System.out.println("請(qǐng)輸入字符串,并多混入空格回車(chē)嘗試不同結(jié)果");
        if(sc.hasNext()){
            System.out.println("第一次"+sc.next());
            System.out.println("第二次"+sc.next());
            System.out.println("第三次"+sc.next());
        }
    }
}

 結(jié)果:

嘗試輸入:空格aaa空格bbb空格ccc回車(chē)

2)hasNext和nextLine組合 

package Day1108;

import day1107.DemoTest07;

import java.util.Scanner;

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);
        System.out.println("請(qǐng)輸入字符串,并多混入空格回車(chē)嘗試不同結(jié)果");
        if(sc.hasNext()){
            System.out.println("第一次"+sc.nextLine());
            System.out.println("第二次"+sc.nextLine());
            System.out.println("第三次"+sc.nextLine());
        }
    }
}

結(jié)果:

光標(biāo)仍然閃爍,證明堆空間中的aaa bbb ccc只賦值給了第一個(gè),這也驗(yàn)證了nextLine可以錄入空格。此時(shí)線控正在等待用戶輸入第二個(gè)nextLine.

3)hasNextLine和next組合 

package Day1108;

import day1107.DemoTest07;

import java.util.Scanner;

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);
        System.out.println("請(qǐng)輸入字符串,并多混入空格回車(chē)嘗試不同結(jié)果");
        if(sc.hasNextLine()){
            System.out.println("第一次"+sc.next());
            System.out.println("第二次"+sc.next());
            System.out.println("第三次"+sc.next());
        }
    }
}

結(jié)果

4)hasNextLine和nextLine組合 

package Day1108;

import day1107.DemoTest07;

import java.util.Scanner;

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);
        System.out.println("請(qǐng)輸入字符串,并多混入空格回車(chē)嘗試不同結(jié)果");
        if(sc.hasNextLine()){
            System.out.println("第一次"+sc.nextLine());
            System.out.println("第二次"+sc.nextLine());
            System.out.println("第三次"+sc.nextLine());
        }
    }
}

結(jié)果:

如果連續(xù)敲回車(chē),那么hasNextLine也會(huì)判斷為true,同時(shí)進(jìn)入if語(yǔ)句執(zhí)行。

總結(jié) 

到此這篇關(guān)于Java鍵盤(pán)錄入Scanner類(lèi)的使用方法的文章就介紹到這了,更多相關(guān)Java鍵盤(pán)錄入Scanner類(lèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論