Java は入力を待つ
Siddharth Swami
2023年10月12日
ユーザー入力は、ユーザーがコンパイラーに処理させたい情報またはデータを参照する場合があります。プログラムでコンパイルを一時停止し、ユーザーが値を入力するのを待つ必要がある場合があります。
このような状況では、nextLine()
関数を使用できます。
このチュートリアルでは、nextLine()
メソッドを使用して Java にユーザー入力を待機させる方法を学習します。
nextLine()
関数は、Java の java.util.Scanner
クラスにあります。この関数は、現在の行を超えて移動し、入力を返すために使用されます。
したがって、このメソッドを使用することにより、コンパイラはユーザーが有効な文字列を入力するのを待ち、プログラムのコンパイルを再開します。このメソッドは、文字列データ型にのみ適用できます。
例えば、
// Java program to illustrate the
// nextLine() method of Scanner class in Java
import java.util.Scanner;
public class Scanner_Class {
public static void main(String[] args) {
// create a new scanner
// with the specified String Object
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
// print the next line
System.out.println("The line entered by the user: " + s);
scanner.close();
}
}
入力:
Hello World.
出力:
The line entered by the user: Hello World.
Scanner.nextLine()
は回線が利用可能になるまで自動的にブロックされるため、入力の利用可能性を確認するのを待つ必要はありません。
次のコードはこれを説明しています。
import java.util.Scanner;
public class Scanner_Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
try {
while (true) {
System.out.println("Please input a line");
long then = System.currentTimeMillis();
String line = scanner.nextLine();
long now = System.currentTimeMillis();
System.out.printf("Waited %.3fs for user input%n", (now - then) / 1000d);
System.out.printf("User input was: %s%n", line);
}
} catch (IllegalStateException | NoSuchElementException e) {
// System.in has been closed
System.out.println("System.in was closed; exiting");
}
}
}
出力:
Please input a line
Hello World.
Waited 1.892s for user input
User input was: Hello World.
Please input a line
^D
System.in was closed; exiting
上記の例では、コンパイラが currentTimeMillis()
関数を使用して入力を待機した時間を計算して示しました。
この関数は 2つの例外を返す場合があります。スキャナーを閉じると IllegalStateException
が発生し、行が見つからない場合は NoSuchElementException
が発生します。