1. 程式人生 > >Java之Scanner類

Java之Scanner類

java.util.Scanner 是 Java5 的新特徵,我們可以通過 Scanner 類來獲取使用者的輸入。

下面是建立 Scanner 物件的基本語法:

Scanner s = new Scanner(System.in);

接下來我們演示一個最簡單的資料輸入,並通過 Scanner 類的 next() 與 nextLine() 方法獲取輸入的字串,在讀取前我們一般需要 使用 hasNext 與 hasNextLine 判斷是否還有輸入的資料:

使用Next方法:

import java.util.Scanner; 
 
public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 從鍵盤接收資料
 
        // next方式接收字串
        System.out.println("next方式接收:");
        // 判斷是否還有輸入
        if (scan.hasNext()) {
            String str1 = scan.next();
            System.out.println("輸入的資料為:" + str1);
        }
        scan.close();
    }
}

執行以上程式碼輸出結果為:

next方式接收:
hello world
輸入的資料為:hello

可以看到 world字串並未輸出,接下來我們看nextLine。

使用nextLine方法:

import java.util.Scanner;
 
public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 從鍵盤接收資料
 
        // nextLine方式接收字串
        System.out.println("nextLine方式接收:");
        // 判斷是否還有輸入
        if (scan.hasNextLine()) {
            String str2 = scan.nextLine();
            System.out.println("輸入的資料為:" + str2);
        }
        scan.close();
    }
}

執行以上程式碼輸出結果為:

nextLine方式接收:
hello world
輸入的資料為:hello world

可以看到 world字串輸出。

next() 與 nextLine() 區別

next():

  • 1、一定要讀取到有效字元後才可以結束輸入。
  • 2、對輸入有效字元之前遇到的空白,next() 方法會自動將其去掉。
  • 3、只有輸入有效字元後才將其後面輸入的空白作為分隔符或者結束符。
  • next() 不能得到帶有空格的字串。

nextLine():

  • 1、以Enter為結束符,也就是說 nextLine()方法返回的是輸入回車之前的所有字元。
  • 2、可以獲得空白。

如果要輸入 int 或 float 型別的資料,在 Scanner 類中也有支援,但是在輸入之前最好先使用 hasNextXxx() 方法進行驗證,再使用 nextXxx() 來讀取:

import java.util.Scanner;
 
public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 從鍵盤接收資料
        int i = 0;
        float f = 0.0f;
        System.out.print("輸入整數:");
        if (scan.hasNextInt()) {
            // 判斷輸入的是否是整數
            i = scan.nextInt();
            // 接收整數
            System.out.println("整數資料:" + i);
        } else {
            // 輸入錯誤的資訊
            System.out.println("輸入的不是整數!");
        }
        System.out.print("輸入小數:");
        if (scan.hasNextFloat()) {
            // 判斷輸入的是否是小數
            f = scan.nextFloat();
            // 接收小數
            System.out.println("小數資料:" + f);
        } else {
            // 輸入錯誤的資訊
            System.out.println("輸入的不是小數!");
        }
        scan.close();
    }
}

執行以上程式碼輸出結果為:

輸入整數:10
整數資料:10
輸入小數:0.1
小數資料:0.1

hasNext與hasNextLine區別

hasNext是檢查是否有非空字元。

hasNextLine是檢查輸入中是否還有linePattern。其中LinePattern其實是匹配一個正則表示式。