我正在使用Scala并从控制台读取输入。我可以反串组成每一行的字符串,但如果我的输入具有以下格式,我如何访问每一行中的每个整数?
2 2
1 2 2
2 1 1
目前,我只是使用将输入反馈回控制台
object Main {
def main(args: Array[String]): Unit = {
for (ln <- io.Source.stdin.getLines) println(ln)
//how can I access each individual number within each line?
}
}
我需要这样编译这个项目:
$ scalac main.scala
$ scala Main <input01.txt
2 2
1 2 2
2 1 1
一个合理的算法是:
- 对于每一行,将其拆分为单词
- 将每个单词解析为
Int
该算法的实现:
io.Source.stdin.getLines // for each line...
.flatMap(
_.split("""s+""") // split it into words
.map(_.toInt) // parse each word into an Int
)
该表达式的结果将是Iterator[Int]
;如果你想要一个Seq
,你可以在该Iterator
上调用toSeq
(如果有合理的机会会有7个左右的整数,那么可能值得调用toVector
(。如果有一个单词不是整数,它就会爆炸成NumberFormatException
。你可以用几种不同的方式来处理。。。如果你想忽略非整数的单词,你可以:
import scala.util.Try
io.Source.stdin.getLines
.flatMap(
_.split("""s+""")
.flatMap(Try(_.toInt).toOption)
)
下面将为您提供一个数字的平面列表。
val integers = (
for {
line <- io.Source.stdin.getLines
number <- line.split("""s+""").map(_.toInt)
} yield number
)
正如您在这里所读到的,在解析数字时必须格外小心。