Intenté usar readInt()
para leer dos enteros de la misma línea pero así no es como funciona.Lectura de múltiples entradas desde la misma línea Scala Way
val x = readInt()
val y = readInt()
Con una entrada de 1 727
me sale el siguiente excepción en tiempo de ejecución:
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)
me dieron el programa para trabajar mediante el uso de readf
pero parece bastante incómoda y desagradable para mí:
val (x,y) = readf2("{0,number} {1,number}")
val a = x.asInstanceOf[Int]
val b = y.asInstanceOf[Int]
println(function(a,b))
Alguien sugirió que solo use la clase de escáner de Java, (Scanner.nextInt()
), pero ¿hay una buena manera idiomática de hacerlo en Scala?
Edición: Mi solución siguiente ejemplo paradigmático de:
val Array(a,b) = readLine().split(" ").map(_.toInt)
pregunta de seguimiento: Si hubiera una mezcla de tipos en la cadena ¿cómo extraerlo? (Diga una palabra, un int y un porcentaje como un doble)
Esto puede ser útil: http://ikaisays.com/2009/04/04/using-pattern-matching-with-regular-expressions-in-scala/ – Swiss