HOWTO · Java

Java Scanner 類中 next() 和 nextLine() 方法的區別

了解何時該用 Scanner.next() 讀取一個 token、何時該用 Scanner.nextLine() 讀取一行的其餘部分,包括將兩者結合使用時會發生什麼事。

本頁內容

Scanner.next() 會讀取一個 token;Scanner.nextLine() 則會傳回目前這一行剩餘的內容,包括其中的空格。若輸入內容以 Scanner 的分隔符分開(預設為空白字元),請使用 next();若整行內容是一個值,則使用 nextLine()。

Java Scanner 中的 next() 方法

next() 會依照 Scanner 的分隔符傳回下一個 token。使用預設分隔符時,空白字元(包括空格、定位字元和換行)會分隔各個 token。例如,輸入 Welcome To Party 時,第一次呼叫 next() 會傳回 Welcome。

以下獨立程式使用固定的範例文字,並印出第一個 token:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("Welcome To Party");
        System.out.println(scanner.next());
        scanner.close();
    }
}
Welcome

Java Scanner 中的 nextLine() 方法

nextLine() 會傳回目前這一行剩餘的內容,保留文字中的空格,並消耗該行的行分隔符。若輸入為 Welcome To,接著是換行,再接著是 Party,呼叫一次會傳回 Welcome To;之後再呼叫一次即可讀取 Party。

以下程式從固定的範例文字中讀取並印出第一個完整行:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("Welcome To\nParty\n");
        System.out.println(scanner.nextLine());
        scanner.close();
    }
}
Welcome To

Java 中 next() 與 nextLine() 方法的差異

行為 next() nextLine()
傳回內容 依目前分隔符定義的下一個 token 目前這一行剩餘的內容,包括其中的空格
停止位置 下一個分隔符;預設為任何空白字元 行分隔符,並會將其消耗
常見用途 與其他輸入內容分開的值,例如姓名或數字 完整的一行,例如某人的全名或一句話

呼叫讀取 token 的方法後,next() 尚未消耗該行的其餘內容,也尚未消耗行分隔符。因此,接著呼叫 nextLine() 時,會傳回同一行剩餘的內容;如果只剩行分隔符,結果就是空字串。若要讀取下一個完整行,先呼叫一次 nextLine() 消耗目前行的剩餘內容,再呼叫一次讀取下一行。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("42\nAda Lovelace\n");
        String number = scanner.next();
        String restOfFirstLine = scanner.nextLine();
        String fullName = scanner.nextLine();
        System.out.println(number);
        System.out.println(restOfFirstLine.isEmpty());
        System.out.println(fullName);
        scanner.close();
    }
}
42
true
Ada Lovelace