如何在字符串中进行多个字符串替换时避免使用var

时间:2015-09-30 11:06:12

标签: scala

这就是我的尝试:

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来实现呢?

2 个答案:

答案 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