首页 > 解决方案 > 如何在 Scala 中读取匹配模式的前一行?

问题描述

我有一个包含以下内容的文件:

a b c d
a d
e f
a g h i

使用 Scala,我想首先找到不以“a”开头的行,然后将当前行附加到前一行。最后,我希望我的输出是这样的。

a b c d
a d e f
a g h i

我能够逐行读取文件但无法继续

import scala.io.Source

val filename = "fileopen.scala"
for (line <- Source.fromFile(filename).getLines) {
  println(line)
}

任何帮助实现这一目标将不胜感激

标签: scala

解决方案


一个相对容易的搜索和替换,但它确实需要将整个文件读入内存。

val rslt = util.Using(io.Source.fromFile("fileopen.scala")){
  _.mkString.replaceAll("\n([^a])", " $1")
}
//rslt: scala.util.Try[String] = Success(a b c d
//                                       a d e f
//                                       a g h i
//                                      )

Scala 2.13 之前的版本:

val file = io.Source.fromFile("fileopen.scala")
val rslt = file.mkString.replaceAll("\n([^a])", " $1")
file.close

推荐阅读