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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲国产日韩欧美一区二区三区 | 日本xxx在线观看免费播放 | 88av免费观看 | 范冰冰性xxxxhd | 成人免费公开视频 | a级影视 | 国产亚洲精品九九久在线观看 | 国产激情一区二区三区成人91 | 99精品视频只99有精品 | 青草国产 | 色老板视频在线观看 | 美女被无套进入 | 精品高潮呻吟99AV无码 | 国产麻豆流白浆在线观看 | 好骚好紧 | 青草视频在线观看免费网站 | 嗯啊视频在线 | 久久综合亚洲色hezyo | 忘忧草高清 | 亚洲好骚综合 | 久久re亚洲在线视频 | 天天狠天天透天干天天怕处 | 果冻传媒林予曦图片 | 美女把小内内脱个精光打屁屁 | 国产一久久香蕉国产线看观看 | 色导行| 精品9e精品视频在线观看 | 天天综合色天天综合 | jk制服喷水 | 91香蕉国产 | 成人18视频在线观看 | 成人免费在线视频网 | 四虎2020紧急免费入口 | 国产性视频 | a级黄色视屏 | 天天操免费视频 | 色热综合| 欧美vpswindowssex 欧美va在线高清 | www.伊人| 免费视频一区 | chinesezoozvideos|