我有一系列行,就像在这个代码段中一样:
def insertBeforeLine(text:String,whichLine:String,what:String) = {
val lines = text.lines
lines.foldLeft(ListBuffer[String]())((acumulator,element) => {
acumulator ++ { if(element == whichLine) Array(what,element) else Array(element) }
}).mkString("\n")
}
我试图在等于whichLine
的每一行之前添加一些东西。有更好/更清洁的方式吗?例如,如果我的输入是:
line1
line2
line4
我将我的函数称为insertBeforeLine(input,"line4","line3")
,它将产生:
line1
line2
line3
line4
答案 0 :(得分:5)
如果你真的有一串行(并且你可以包含行尾字符,并且它是一致的),你可以使用java.lang.String
中的替换:
text.replace(which,what+which)
但如果你想要更通用的东西,比如
lines.flatMap(l => if (l==which) Seq(what,l) else Seq(l))
是一种紧凑而清晰的表达方式(至少对那些了解flatMap
如何工作的人来说。)
如果你想要一些最有效的东西,那么这是一个很长的丑陋的答案,有很多while循环,可能还有一些字节数组中间体。