最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Java中Scanner的用法總結(jié)

 更新時(shí)間:2021年10月30日 14:50:55   作者:Megustas_JJC  
這篇文章主要介紹了在Java中Scanner的用法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

最近在做OJ類問題的時(shí)候,經(jīng)常由于Scanner的使用造成一些細(xì)節(jié)問題導(dǎo)致程序不通過(最慘的就是網(wǎng)易筆試,由于sc死循環(huán)了也沒發(fā)現(xiàn),導(dǎo)致AC代碼也不能通過。。。),因此對(duì)Scanner進(jìn)行了一些總結(jié)整理。

Scanner類簡(jiǎn)介

Java 5添加了java.util.Scanner類,這是一個(gè)用于掃描輸入文本的新的實(shí)用程序。

它是以前的StringTokenizer和Matcher類之間的某種結(jié)合。由于任何數(shù)據(jù)都必須通過同一模式的捕獲組檢索或通過使用一個(gè)索引來(lái)檢索文本的各個(gè)部分。

于是可以結(jié)合使用正則表達(dá)式和從輸入流中檢索特定類型數(shù)據(jù)項(xiàng)的方法。這樣,除了能使用正則表達(dá)式之外,Scanner類還可以任意地對(duì)字符串和基本類型(如int和double)的數(shù)據(jù)進(jìn)行分析。

借助于Scanner,可以針對(duì)任何要處理的文本內(nèi)容編寫自定義的語(yǔ)法分析器。

關(guān)于nextInt()、next()和nextLine()的理解

nextInt(): it only reads the int value, nextInt() places the cursor(光標(biāo)) in the same line after reading the input.(nextInt()只讀取數(shù)值,剩下"\n"還沒有讀取,并將cursor放在本行中)

next(): read the input only till the space. It can't read two words separated by space. Also, next() places the cursor in the same line after reading the input.(next()只讀空格之前的數(shù)據(jù),并且cursor指向本行)

next() 方法遇見第一個(gè)有效字符(非空格,非換行符)時(shí),開始掃描,當(dāng)遇見第一個(gè)分隔符或結(jié)束符(空格或換行符)時(shí),結(jié)束掃描,獲取掃描到的內(nèi)容,即獲得第一個(gè)掃描到的不含空格、換行符的單個(gè)字符串。

nextLine(): reads input including space between the words (that is, it reads till the end of line \n). Once the input is read, nextLine() positions the cursor in the next line.

nextLine()時(shí),則可以掃描到一行內(nèi)容并作為一個(gè)字符串而被獲取到。

public class NextTest{  
    public static void main(String[] args) {  
        String s1,s2;  
        Scanner sc=new Scanner(System.in);  
        System.out.print("請(qǐng)輸入第一個(gè)字符串:");  
        s1=sc.nextLine();  
        System.out.print("請(qǐng)輸入第二個(gè)字符串:");  
        s2=sc.next();  
        System.out.println("輸入的字符串是:"+s1+" "+s2);  
    }  
}  

結(jié)果:

請(qǐng)輸入第一個(gè)字符串:home
請(qǐng)輸入第二個(gè)字符串:work
輸入的字符串是:home work

把上面的程序修改一下:

s1=sc.next();  
s2=sc.nextLine();  

運(yùn)行結(jié)果:

請(qǐng)輸入第一個(gè)字符串:home
請(qǐng)輸入第二個(gè)字符串:輸入的字符串是:home

可以看到,nextLine()自動(dòng)讀取了被next()去掉的Enter作為他的結(jié)束符,所以沒辦法給s2從鍵盤輸入值。

經(jīng)過驗(yàn)證,我發(fā)現(xiàn)其他的next的方法,如double nextDouble() , float nextFloat() , int nextInt() 等與nextLine()連用時(shí)都存在這個(gè)問題,解決的辦法是:在每一個(gè) next()、nextDouble() 、 nextFloat()、nextInt() 等語(yǔ)句之后加一個(gè)nextLine()語(yǔ)句,將被next()去掉的Enter結(jié)束符過濾掉。

public class NextTest{  
    public static void main(String[] args) {  
        String s1,s2;  
        Scanner sc=new Scanner(System.in);  
        System.out.print("請(qǐng)輸入第一個(gè)字符串:");  
        s1=sc.next();  
        sc.nextLine();
        System.out.print("請(qǐng)輸入第二個(gè)字符串:");  
        s2=sc.nextLine();  
        System.out.println("輸入的字符串是:"+s1+" "+s2);  
    }  
}  

運(yùn)行結(jié)果:

請(qǐng)輸入第一個(gè)字符串:home
請(qǐng)輸入第二個(gè)字符串:work
輸入的字符串是:home work

循環(huán)輸入多組測(cè)試用例

一個(gè)while就是一個(gè)測(cè)試用例

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        // 一個(gè)while就是一個(gè)測(cè)試用例
        while(in.hasNext()){
            int n = in.nextInt(); // 該測(cè)試用例后續(xù)接收的參數(shù)個(gè)數(shù)
            long[] array = new long[n];
            String[] arrayStr = new String[n];
            for(int i=0; i<n; i++){
                arrayStr[i] = in.next();
            }
            for(int i=0; i<n; i++){
                array[i] = in.nextLong();// 取下一個(gè)元素轉(zhuǎn)換成long類型
            }
            System.out.println(Arrays.toString(array)+" "+ Arrays.toString(arrayStr));
        }
    }

一個(gè)與容器結(jié)合的綜合例子:

import java.util.Scanner;    
public class Main {    
    public static void main(String[] args) {    
        Scanner in = new Scanner(System.in);    
        while (in.hasNext()) {    
            int n = in.nextInt();   
        /* nextLine()是掃描器執(zhí)行當(dāng)前行,并返回跳過的輸入信息,特別需要注意?。?! 
 
            如果沒有該行,則執(zhí)行第一個(gè)in.nextLine()命令時(shí)的返回值是int n = in.nextInt()的值*/   
            in.nextLine();  
        HashSet<String> set = new HashSet<String>();  
        for (int i = 0; i < n; i++) {   
        String line =   
  
        in.nextLine();   
        String[] arr = line.split(" ");   
        for (int j = 0; j < arr.length; j++) {   
            set.add(arr[j]);   
        }  
         }  
        System.out.println("sum:" + set.size()); 
    }    
}  

輸入:
3
a b c
d e f
a b c
輸出:
6

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

相關(guān)文章

  • java8異步調(diào)用如何使用才是最好的方式

    java8異步調(diào)用如何使用才是最好的方式

    異步調(diào)用主要用于當(dāng)前程序的執(zhí)行不用等待調(diào)用方法執(zhí)行結(jié)束就可以繼續(xù)執(zhí)行,下面這篇文章主要給大家介紹了關(guān)于java8異步調(diào)用如何使用才是最好的方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • Spring MVC 處理Ajax請(qǐng)求的方式詳解

    Spring MVC 處理Ajax請(qǐng)求的方式詳解

    本文介紹了在SpringMVC中處理Ajax請(qǐng)求的方法,主要依賴于Controller和返回類型的配置,使用@RequestMapping注解處理Ajax的控制器方法,本文給大家介紹Spring MVC 處理Ajax請(qǐng)求的方式,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • Spring實(shí)戰(zhàn)之搜索Bean類操作示例

    Spring實(shí)戰(zhàn)之搜索Bean類操作示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之搜索Bean類操作,結(jié)合實(shí)例形式分析了Spring搜索Bean類的相關(guān)配置、接口實(shí)現(xiàn)與操作技巧,需要的朋友可以參考下
    2019-12-12
  • Java實(shí)現(xiàn)選擇排序

    Java實(shí)現(xiàn)選擇排序

    這篇文章主要介紹了Java實(shí)現(xiàn)選擇排序,把一列數(shù)組按從小到大或從大到小排序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • SpringCloud中NacosNamingService的作用詳解

    SpringCloud中NacosNamingService的作用詳解

    這篇文章主要介紹了SpringCloud中NacosNamingService的作用詳解,NacosNamingService類完成服務(wù)實(shí)例注冊(cè),撤銷與獲取服務(wù)實(shí)例操作,NacosNamingService初始化采用單例模式,使用反射生成,需要的朋友可以參考下
    2023-11-11
  • SpringBoot中集成日志的四種方式

    SpringBoot中集成日志的四種方式

    在開發(fā)中,日志記錄是保障應(yīng)用程序健壯性、可維護(hù)性的重要手段,通過日志,我們可以記錄系統(tǒng)的運(yùn)行狀態(tài)、捕獲異常并進(jìn)行調(diào)試,Spring Boot 默認(rèn)使用的是 Logback,但你也可以根據(jù)需求選擇其他框架,以下是幾種常用的日志集成方法,需要的朋友可以參考下
    2024-10-10
  • 你一定不知道的Java Unsafe用法詳解

    你一定不知道的Java Unsafe用法詳解

    Unsafe是位于sun.misc包下的一個(gè)類,主要提供一些用于執(zhí)行低級(jí)別、不安全操作的方法,如直接訪問系統(tǒng)內(nèi)存資源、自主管理內(nèi)存資源等,下面這篇文章主要給大家介紹了關(guān)于Java Unsafe用法的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • java中常用的阻塞隊(duì)列與非阻塞隊(duì)列詳解

    java中常用的阻塞隊(duì)列與非阻塞隊(duì)列詳解

    這篇文章主要介紹了java中常用的阻塞隊(duì)列與非阻塞隊(duì)列用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Docker 解決openjdk容器里無(wú)法使用JDK的jmap等命令問題

    Docker 解決openjdk容器里無(wú)法使用JDK的jmap等命令問題

    這篇文章主要介紹了Docker 解決openjdk容器里無(wú)法使用JDK的jmap等命令問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-12-12
  • JAVA過濾標(biāo)簽實(shí)現(xiàn)將html內(nèi)容轉(zhuǎn)換為文本的方法示例

    JAVA過濾標(biāo)簽實(shí)現(xiàn)將html內(nèi)容轉(zhuǎn)換為文本的方法示例

    這篇文章主要介紹了JAVA過濾標(biāo)簽實(shí)現(xiàn)將html內(nèi)容轉(zhuǎn)換為文本的方法,涉及java針對(duì)HTML代碼的正則替換相關(guān)操作技巧,需要的朋友可以參考下
    2017-07-07

最新評(píng)論

思茅市| 冕宁县| 周宁县| 河东区| 海门市| 佛坪县| 临洮县| 梁河县| 榆林市| 锡林浩特市| 保亭| 宜宾市| 赤峰市| 丽水市| 淄博市| 连云港市| 平山县| 兴化市| 南通市| 曲周县| 镇雄县| 钟祥市| 大埔区| 庆阳市| 延寿县| 孟州市| 乐业县| 南郑县| 泰顺县| 呼玛县| 九寨沟县| 香格里拉县| 仙桃市| 连江县| 赣州市| 铁岭县| 宾阳县| 亳州市| 崇义县| 当阳市| 杭锦后旗|