1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Kotlinで標準入力をする方法

Posted at

Kotlinで標準入力をする方法にはいくつかの選択肢があります。この記事では、それぞれの方法の特徴や使い方を紹介します。

main関数の引数に渡す

Kotlinでは、main関数は引数としてString型の配列を受け取ることができます。この配列には、プログラム実行時にコマンドラインから渡された引数が格納されます。例えば、以下のようなコードを実行すると、

fun main(args: Array<String>) {
    for (arg in args) {
        println(arg)
    }
}

コマンドラインから以下のように引数を渡すと、

$ kotlinc Main.kt -include-runtime -d Main.jar
$ java -jar Main.jar hello world

以下のように出力されます。

hello
world

この方法では、シンプルな記述で入力を受け取ることができますが、実行時に引数を渡す必要があります。また、引数はすべてString型として扱われるため、数値や真偽値などに変換する場合は別途キャストを行う必要があります。

readLine関数を使う

readLine関数はKotlin標準ライブラリに含まれる関数で、標準入力から一行分のテキストを読み込むことができます。例えば、以下のようなコードを実行すると、

fun main() {
    println("名前を入力してください")
    val name = readLine()
    println("年齢を入力してください")
    val age = readLine()?.toInt()
    println("名前は${name}、年齢は${age}です")
}

コマンドラインから以下のように入力すると、

名前を入力してください
Alice
年齢を入力してください
20

以下のように出力されます。

名前はAlice、年齢は20です

この方法では、プログラム実行中に任意のタイミングで入力を受け取ることができます。また、一行ごとに入力を取得するため、空白区切りや改行区切りなどの形式に対応することができます。

しかし、readLine関数はnullや型に注意して使用する必要があります。readLine関数はString?型(null許容型)を返すため、nullチェックやエルビス演算子(?:)などを使って安全に扱う必要があります。また、readLine関数は文字列として読み込むため、数値や真偽値などに変換する場合はtoIntやtoBooleanなどの拡張関数を使ってキャストする必要があります。

Scannerクラスを使う

ScannerクラスはJava標準ライブラリに含まれるクラスで、標準入力からテキストを区切り文字(デフォルトでは空白)で分割して読み込むことができます。例えば、以下のようなコードを実行すると、

import java.util.Scanner

fun main() {
    val scanner = Scanner(System.`in`)
    println("名前を入力してください")
    val name = scanner.next()
    println("年齢を入力してください")
    val age = scanner.nextInt()
    println("名前は${name}、年齢は${age}です")
}

コマンドラインから以下のように入力すると、

名前を入力してください
Alice
年齢を入力してください
20

以下のように出力されます。

名前はAlice、年齢は20です

この方法では、readLine関数と同様にプログラム実行中に任意のタイミングで入力を受け取ることができます。また、ScannerクラスはnextIntやnextDoubleなどのメソッドを使って、テキストを数値や真偽値などのプリミティブ型に変換することができます。

しかし、ScannerクラスはJavaのクラスであるため、Kotlinのnull安全性や拡張関数などの機能を利用することができません。また、Scannerクラスは区切り文字で分割するために正規表現を使っており、これが処理速度の低下につながる可能性があります。さらに、Scannerクラスは入力ストリームを同期する必要があるために、他の入出力と競合する可能性があります。

まとめ

Kotlinで標準入力をする方法には以下の3つがあります。

  • main関数の引数に渡す
  • readLine関数を使う
  • Scannerクラスを使う

それぞれの方法にはメリットとデメリットがあります。用途や目的に応じて使い分けることが大切です。

ソース: Bing との会話 2023/9/24
(1) Kotlinで標準入力あれこれ - Qiita. https://qiita.com/gumimin/items/eafdf66368d7d63f737c.
(2) Kotlinで標準入力 - Qiita. https://qiita.com/yotu/items/44013287fabd8be75aa1.
(3) Kotlinで標準入力あれこれ - Qiita. https://bing.com/search?q=Kotlin%e3%81%a7%e3%81%ae%e6%a8%99%e6%ba%96%e5%85%a5%e5%8a%9b%e3%81%ae%e6%96%b9%e6%b3%95.

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?