一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 在Java中Scanner的用法總結

在Java中Scanner的用法總結

2022-03-07 00:49Megustas_JJC Java教程

這篇文章主要介紹了在Java中Scanner的用法總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

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

Scanner類簡介

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

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

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

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

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

nextInt(): it only reads the int value, nextInt() places the cursor(光標) in the same line after reading the input.(nextInt()只讀取數值,剩下"\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()只讀空格之前的數據,并且cursor指向本行)

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

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

?
1
2
3
4
5
6
7
8
9
10
11
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

把上面的程序修改一下:

?
1
2
s1=sc.next(); 
s2=sc.nextLine();

運行結果:

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
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

循環輸入多組測試用例

一個while就是一個測試用例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args){
    Scanner in = new Scanner(System.in);
    // 一個while就是一個測試用例
    while(in.hasNext()){
        int n = in.nextInt(); // 該測試用例后續接收的參數個數
        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));
    }
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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()是掃描器執行當前行,并返回跳過的輸入信息,特別需要注意!!!
 
            如果沒有該行,則執行第一個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

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/Megustas_JJC/article/details/68960433

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 天堂日韩 | 国产主播福利在线观看 | 国产精品四虎在线观看免费 | www日本在线观看 | 亚洲不卡视频 | 操动漫美女视频 | 韩国美女主播在线 | 美女女女女女女bbbbbb毛片 | 成人精品第一区二区三区 | 魔兽官方小说 | 色婷婷婷丁香亚洲综合不卡 | 国内精品露脸在线视频播放 | aⅴ视频在线免播放观看 | 午夜欧美精品久久久久久久 | 成人精品mv视频在线观看 | 美女逼逼喷水 | 国产成人毛片 | 国产色网址 | 1377大但人文艺术包子铺 | 国产婷婷综合丁香亚洲欧洲 | 欧美久久久久久久一区二区三区 | 国产一级片免费视频 | 久久88综合 | 日本大片免aaa费观看视频 | 欧美最猛性xxxxx男男 | 午夜神器老司机高清无码 | 99rv精品视频在线播放 | 白丝女仆被啪到深夜漫画 | 日本大尺度动漫在线观看缘之空 | 国产偷啪 | 学校捏奶揉下面污文h | 性妲己| 国产成人综合一区精品 | 日本成人黄色网址 | chinese腹肌gay| 亚洲精品国产综合久久一线 | 男女男精品视频网站 | 欧美高清3dfreexxxx性 | 国产免费成人在线视频 | 亚欧洲乱码视频一二三区 | 肉色欧美久久久久久久蜜桃 |