正在从文本文件中的行读取多个整数



我正在使用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
)

正如您在这里所读到的,在解析数字时必须格外小心。

相关内容

  • 没有找到相关文章

最新更新