Java は入力を待つ

Siddharth Swami 2023年10月12日
Java は入力を待つ

ユーザー入力は、ユーザーがコンパイラーに処理させたい情報またはデータを参照する場合があります。プログラムでコンパイルを一時停止し、ユーザーが値を入力するのを待つ必要がある場合があります。

このような状況では、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 が発生します。

関連記事 - Java Input