Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Replace multiple words on string using Map of replacements

Tags:

string

scala

I have a map of replacements

val replacements = Map( "aaa" -> "d", "bbb" -> "x", "ccc" -> "mx")

I would like to replace all occurrences of each map key in the string with the corresponding value.

val str = "This aaa is very bbb and I would love to cccc"
val result = cleanString(str, replacements)
result = "This d is very x and I would love to mx"

I have done

val sb = new StringBuilder(str)
for(repl <- replacements.keySet) yield {
  sb.replaceAllLiterally(repl, replacement.get(repl))
}

but I would like something more functional like a map or fold where the function I apply to the string returns another string without needing a mutable variable that is modified inside the loop.

like image 385
locorecto Avatar asked Apr 13 '17 19:04

locorecto


1 Answers

One option: use foldLeft on the Map with str as the initial parameter:

replacements.foldLeft(str)((a, b) => a.replaceAllLiterally(b._1, b._2))
// res8: String = This d is very x and I would love to mxc
like image 151
Psidom Avatar answered Sep 18 '22 12:09

Psidom