Я попытался использовать readInt()
для чтения двух целых чисел из одной строки, но это работает не так.
val x = readInt()
val y = readInt()
При вводе 1 727
я получаю следующее исключение во время выполнения:
Exception in thread "main" java.lang.NumberFormatException: For input string: "1 727"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at scala.collection.immutable.StringLike$class.toInt(StringLike.scala:231)
at scala.collection.immutable.StringOps.toInt(StringOps.scala:31)
at scala.Console$.readInt(Console.scala:356)
at scala.Predef$.readInt(Predef.scala:201)
at Main$$anonfun$main$1.apply$mcVI$sp(Main.scala:11)
at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:75)
at Main$.main(Main.scala:10)
at Main.main(Main.scala)
Я заставил программу работать, используя readf
, но это кажется мне довольно неудобным и некрасивым:
val (x,y) = readf2("{0,number} {1,number}")
val a = x.asInstanceOf[Int]
val b = y.asInstanceOf[Int]
println(function(a,b))
Кто-то предложил мне просто использовать класс Scanner от Java, (Scanner. nextInt()
), но есть ли хороший идиоматический способ сделать это в Scala?
Edit: Мое решение по примеру paradigmatic:
val Array(a,b) = readLine().split(" ").map(_.toInt)
Последующий вопрос: Если бы в строке была смесь типов, как бы вы ее извлекли? (Скажем, слово, int и процент как Double)