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

Java鍵盤錄入Scanner類的使用方法詳析

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

引言

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

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

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

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

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

變量名.方法名();

1. Scanner類的介紹

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

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

2. Scanner使用步驟:

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

 示例

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引用類型的變量
        Scanner sc = new Scanner(System.in);
        //獲取數(shù)字
        System.out.println("請輸入一個數(shù)字");
        int n=sc.nextInt();
        System.out.println("n的值為"+n);
        //獲取字符串
        System.out.println("請輸入一個字符串");
        String str=sc.next();
        System.out.println("str的值為"+str);
    }
}

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

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

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

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

4. 關(guān)閉Scanner類

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

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

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

所以大家一定要在用不到掃描器之后再關(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("請輸入一個整數(shù)");
        BigInteger bi=sc.nextBigInteger();//讀入一個Integer
        System.out.println("bi="+bi);

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

 結(jié)果

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

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

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

1)我們先來測試一下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()方法再識別輸入的字符串時,不能得到我們輸入的帶有空格的字符串,只是讀取到了Hello.

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

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

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

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

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

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

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

2)我們再來測試一下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()并沒有被字符串中間的空格影響讀取結(jié)果。

這是因?yàn)樵摲椒ㄒ缘氖腔剀嚪ㄒ簿褪俏覀冩I盤的enter鍵)作為結(jié)束標(biāo)識符。

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

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

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

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

二者都是用于判斷"有無鍵盤輸入”的,有則返回true,沒有則阻塞!

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

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

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

??實(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é)果:(按了很多個換行也無法結(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é)果:

(直接按回車鍵也會為true)

總結(jié):

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

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

  • hasNext、next不能直接識別luo,而hasNextLine和nextLine都可以之別裸回車。換句話講:對于不輸入符號而直接裸敲一個回車的操作,只有后兩個能識別到。

  • hasNext、hasNextLine在返回一個boolean類型結(jié)果為true的同時,會在堆空間中開辟一塊專門用于存放剛剛輸入的字符串,用于下次next或者nextLine:即下次next或者nextLine不需要再從鍵盤輸入,相當(dāng)于系統(tǒng)自動把剛剛輸入的字符串再原封不動的輸入了一遍。同時這個存儲壽命=調(diào)用對象的壽命。

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

  • hasNext是線程阻塞的,對于hasNext來說,如果一直不輸入字符,反而一直敲回車的話,整個線程會卡在這個輸入的地方,直到有字符輸入。

因?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("請輸入字符串,并多混入空格回車嘗試不同結(jié)果");
        if(sc.hasNext()){
            System.out.println("第一次"+sc.next());
            System.out.println("第二次"+sc.next());
            System.out.println("第三次"+sc.next());
        }
    }
}

 結(jié)果:

嘗試輸入:空格aaa空格bbb空格ccc回車

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("請輸入字符串,并多混入空格回車嘗試不同結(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只賦值給了第一個,這也驗(yàn)證了nextLine可以錄入空格。此時線控正在等待用戶輸入第二個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("請輸入字符串,并多混入空格回車嘗試不同結(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("請輸入字符串,并多混入空格回車嘗試不同結(jié)果");
        if(sc.hasNextLine()){
            System.out.println("第一次"+sc.nextLine());
            System.out.println("第二次"+sc.nextLine());
            System.out.println("第三次"+sc.nextLine());
        }
    }
}

結(jié)果:

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

總結(jié) 

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

您可能感興趣的文章:

相關(guān)文章

最新評論