如何在Scala中读取匹配模式的前一行?

问题描述 投票:0回答:1

我有一个内容文件

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
1个回答
3
投票

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

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("so.txt")
val rslt = file.mkString.replaceAll("\n([^a])", " $1")
file.close
© www.soinside.com 2019 - 2024. All rights reserved.