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