HOWTO · Java
Java スキャナークラスの next()メソッドと nextLine()メソッドの違い
Scanner.next() をトークンに、Scanner.nextLine() を行の残りに使うべき場面と、両方を組み合わせたときに何が起こるかを学びます。
このページの内容
Scanner.next() は次のトークンを読み取り、Scanner.nextLine() は空白を含む現在行の残りを返します。Scanner の区切り文字(既定では空白文字)で分けられた入力には next() を使い、行全体を1つの値として扱う場合は nextLine() を使います。
JavaのScannerにおけるnext()メソッド
next() は、Scanner の区切り文字に従って次のトークンを返します。既定の区切り文字では、スペース、タブ、改行などの空白文字によってトークンが分割されます。たとえば入力が Welcome To Party の場合、最初の next() 呼び出しは Welcome を返します。
次の自己完結型プログラムは固定のサンプル行を使い、最初のトークンを出力します。例の固定文字列と表示される Welcome は、コードと出力をそのまま保つため英語表記です。
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 という順なら、1回の呼び出しで Welcome To が返り、その後の呼び出しで Party を読み取れます。
次のプログラムは固定サンプルの先頭行全体を読み取って出力します。例の固定文字列と表示される Welcome To は、コードと出力をそのまま保つため英語表記です。
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() |
|---|---|---|
| 返す内容 | 現在の区切り文字で定義された次のトークン | 内部のスペースを含む現在行の残り |
| 読み取りを止める位置 | 次の区切り文字。既定では空白文字 | 消費される行区切り文字 |
| よく使う場面 | 他の入力と区切られた名前や数値などの値 | 人のフルネームや文のような行全体 |
トークンを読み取った後も、その行の残りと行区切り文字は next() によって消費されていません。そのため、続けて nextLine() を呼ぶと、同じ行の残りが返ります。残っているのが行区切り文字だけなら、結果は空文字列です。次の行全体を読み取るには、まず nextLine() を1回呼んで現在行の残りを消費し、もう一度呼び出して次の行を読み取ります。例の表示に含まれる Ada Lovelace は固定データで、コードと出力をそのまま保つため英語表記です。
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