Scala

Scalaの標準入力

More than 2 years have passed since last update.

PaizaAOJなどのオンラインプログラミングを久しぶりにやると、忘れてることが多いのでメモ。
標準出力を扱う方法がいくつかあるので、状況によって使い分けます。

単一行を読み込む場合

単純に一行読み込みたい場合はio.StdIn.readLine()を使用します。

例:スペース区切の文字を昇順ソートして出力

input
 e c a b d 
Main.scala
object Main extends App {
  val strAry = io.StdIn.readLine().split(' ')
  println(strAry.sorted.mkString(" "))
}
// 出力結果
// a b c d e

複数行読み込む場合

複数行読み込みたい場合はio.Source.stdin.getLines()を使用し、for式で処理します。

例:各行の数字を昇順ソートして出力
input
 1 4 3 5 2
 3 5 2 1 4
 1 3 2 4 5
Main.scala
object Main extends App {
  for(line <- io.Source.stdin.getLines()) {
    val numAry = line.split(' ').map { _.toInt }
    println(numAry.sorted.mkString(" "))
  }
}
// 出力結果
// 1 2 3 4 5
// 1 2 3 4 5
// 1 2 3 4 5

参考:java.util.Scannerを利用する

ScalaではJavaクラスを簡単に利用することができます。

input
 1a2a3a
Main.scala
object Main extends App {
  val scanner = new java.util.Scanner(System.in)
  scanner.useDelimiter("a")
  while(scanner.hasNext){
    println(scanner.next)
  }
}
// 出力結果
// 1
// 2
// 3
参考