亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

在Java中Scanner的用法總結

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

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

Scanner類簡介

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

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

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

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

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

nextInt(): it only reads the int value, nextInt() places the cursor(光標) 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() 方法遇見第一個有效字符(非空格,非換行符)時,開始掃描,當遇見第一個分隔符或結束符(空格或換行符)時,結束掃描,獲取掃描到的內(nèi)容,即獲得第一個掃描到的不含空格、換行符的單個字符串。

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()時,則可以掃描到一行內(nèi)容并作為一個字符串而被獲取到。

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

結果:

請輸入第一個字符串:home
請輸入第二個字符串:work
輸入的字符串是:home work

把上面的程序修改一下:

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

運行結果:

請輸入第一個字符串:home
請輸入第二個字符串:輸入的字符串是:home

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

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

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

運行結果:

請輸入第一個字符串:home
請輸入第二個字符串:work
輸入的字符串是:home work

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

一個while就是一個測試用例

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        // 一個while就是一個測試用例
        while(in.hasNext()){
            int n = in.nextInt(); // 該測試用例后續(xù)接收的參數(shù)個數(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();// 取下一個元素轉換成long類型
            }
            System.out.println(Arrays.toString(array)+" "+ Arrays.toString(arrayStr));
        }
    }

一個與容器結合的綜合例子:

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í)行當前行,并返回跳過的輸入信息,特別需要注意?。?! 
 
            如果沒有該行,則執(zhí)行第一個in.nextLine()命令時的返回值是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

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

相關文章

  • java+jsp+struts2實現(xiàn)發(fā)送郵件功能

    java+jsp+struts2實現(xiàn)發(fā)送郵件功能

    這篇文章主要為大家詳細介紹了java+jsp+struts2實現(xiàn)發(fā)送郵件功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • mall整合SpringSecurity及JWT認證授權實戰(zhàn)下

    mall整合SpringSecurity及JWT認證授權實戰(zhàn)下

    這篇文章主要為大家介紹了mall整合SpringSecurity及JWT認證授權實戰(zhàn)第二篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • java sqlserver text 類型字段讀取方法

    java sqlserver text 類型字段讀取方法

    有這樣一個需求,需要將原本存儲在數(shù)據(jù)庫中的文檔轉存至文件系統(tǒng)中,于是寫了一個簡單的程序完成此功能
    2012-11-11
  • 淺談cookie和session(小結)

    淺談cookie和session(小結)

    這篇文章主要介紹了淺談cookie和session(小結),cookie和session在java web開發(fā)中扮演了十分重要的作用,本篇文章對其中的重要知識點做一些探究和總結
    2018-11-11
  • mybatis.type-aliases-package的作用及用法說明

    mybatis.type-aliases-package的作用及用法說明

    這篇文章主要介紹了mybatis.type-aliases-package的作用及用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java 服務端消息推送的實現(xiàn)小結

    Java 服務端消息推送的實現(xiàn)小結

    本文主要介紹了Java 服務端消息推送的實現(xiàn)小結,主要包括四種常見的消息實時推送方案:短輪詢、長輪詢、SSE?和?WebSocket,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • Java語言基于無向有權圖實現(xiàn)克魯斯卡爾算法代碼示例

    Java語言基于無向有權圖實現(xiàn)克魯斯卡爾算法代碼示例

    這篇文章主要介紹了Java語言基于無向有權圖實現(xiàn)克魯斯卡爾算法代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Spring中事務幾個常見的問題解決

    Spring中事務幾個常見的問題解決

    這篇文章主要介紹了Spring中事務幾個常見的問題解決,事務這個概念是數(shù)據(jù)庫層面的,Spring只是基于數(shù)據(jù)庫中的事務進行擴展,以及提供了一些能讓程序員更新方便操作事務的方式
    2022-08-08
  • SpringCloud協(xié)同開發(fā)實現(xiàn)方法淺析

    SpringCloud協(xié)同開發(fā)實現(xiàn)方法淺析

    好幾個人同時開發(fā)同一個服務上的不同模塊,導致你需要調(diào)試的接口總是被路由到別人的服務上,非常影響調(diào)試的效率,而且人越多越難受,總是請求不到自己的服務,這篇文章主要介紹了SpringCloud協(xié)同開發(fā)實現(xiàn)方法
    2022-12-12
  • Java連接Sql數(shù)據(jù)庫經(jīng)常用到的操作

    Java連接Sql數(shù)據(jù)庫經(jīng)常用到的操作

    這篇文章主要介紹了Java連接Sql數(shù)據(jù)庫經(jīng)常用到的操作的相關資料,需要的朋友可以參考下
    2016-02-02

最新評論