標準入力
Java Scannerは動作が低速なツールです。Scannerが提供する特定の機能が必要な場合にのみ使用してください。 そうでない場合は、通常、Kotlinの
readln()関数を使用して標準入力を読み取るのが望ましいです。
標準入力から読み取るために、JavaはScannerクラスを提供しています。Kotlinでは、標準入力から読み取るための主な方法として、Javaと同様のScannerクラスとreadln()関数の2つが用意されています。
Java Scannerを使用して標準入力から読み取る
Javaでは、通常System.inオブジェクトを介して標準入力にアクセスします。Scannerクラスをインポートしてオブジェクトを作成し、.nextLine()や.nextInt()などのメソッドを使用してさまざまなデータ型を読み取ります。
// Javaの実装
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 入力を1行読み取ります。例: Hi there!
System.out.print("Enter a line: ");
String line = scanner.nextLine();
System.out.println("You entered: " + line);
// 出力: You entered: Hi there!
// 整数を読み取ります。例: 08081990
System.out.print("Enter an integer: ");
int number = scanner.nextInt();
System.out.println("You entered: " + number);
// 出力: You entered: 08081990
scanner.close();
}
}KotlinでJava Scannerを使用する
KotlinはJavaライブラリとの相互運用性を備えているため、特別な設定なしでKotlinコードからJava Scannerにアクセスできます。
KotlinでJava Scannerを使用するには、Scannerクラスをインポートし、標準入力ストリームを表しデータの読み取り方を指定するSystem.inオブジェクトを渡して初期化する必要があります。 文字列以外の値を読み取るために、.nextLine()、.next()、.nextInt()などの利用可能な読み取りメソッドを使用できます。
// Java Scannerをインポート
import java.util.Scanner
fun main() {
// Scannerを初期化
val scanner = Scanner(System.`in`)
// 文字列を1行まるごと読み取ります。例: "Hello, Kotlin"
val line = scanner.nextLine()
print(line)
// Hello, Kotlin
// 文字列を読み取ります。例: "Hello"
val string = scanner.next()
print(string)
// Hello
// 数値を読み取ります。例: 123
val num = scanner.nextInt()
print(num)
// 123
}Java Scannerで入力を読み取る際に便利なその他のメソッドとして、.hasNext()、.useDelimiter()、.close()があります。
.hasNext()メソッドは、入力に利用可能なデータがまだあるかどうかをチェックします。反復処理する要素が残っている場合はブール値のtrueを返し、入力に要素が残っていない場合はfalseを返します。.useDelimiter()メソッドは、入力要素を読み取るためのデリミタ(区切り文字)を設定します。デフォルトのデリミタは空白文字ですが、他の文字を指定することもできます。 例えば、.useDelimiter(",")は、カンマで区切られた入力要素を読み取ります。.close()メソッドは、Scannerに関連付けられた入力ストリームを閉じ、それ以上Scannerを使用して入力を読み取れないようにします。
Java Scannerの使用が終わったら、必ず
.close()メソッドを使用してください。Java Scannerを閉じると、消費されていたリソースが解放され、プログラムが適切に動作するようになります。
readln() を使用して標準入力から読み取る
Kotlinには、Java Scannerのほかに readln() 関数があります。これは入力を読み取るための最も簡単な方法です。この関数は標準入力からテキストを1行読み取り、それを文字列として返します。
// 文字列を読み取ります。例: Charlotte
val name = readln()
// 文字列を読み取り、整数に変換します。例: 43
val age = readln().toInt()
println("Hello, $name! You are $age years old.")
// Hello, Charlotte! You are 43 years old.詳細については、標準入力の読み取りを参照してください。
