这就是我的尝试:
def doStringReplcements(originalStr: String, replacementsMap: Map[String,String]): String = {
var newStr = originalStr
replacementsMap.foreach { pair =>
newStr = newStr.replaceAllLiterally(pair._1, pair._2)
}
newStr
}
但是函数编程风格建议避免使用vars,那么如何使用vals来实现呢?
答案 0 :(得分:4)
考虑在地图上使用foldLeft
功能。
e.g。
replacementsMap.foldLeft(originalStr){ case (accumulator, (target, replacement)) =>
accumulator.replaceAllLiterally(target, replacement)
}
答案 1 :(得分:2)
考虑正则表达式:
scala> import util.matching.Regex
import util.matching.Regex
scala> val text = "one in hand, two in bush"
text: String = one in hand, two in bush
scala> val reps = Map("one"->"lots","two"->"more")
reps: scala.collection.immutable.Map[String,String] = Map(one -> lots, two -> more)
scala> val r = reps.keys.mkString("|").r
r: scala.util.matching.Regex = one|two
scala> r.replaceAllIn(text, m=>reps(m.matched))
res0: String = lots in hand, more in bush