如何用scala有效地替换多个字符?
how to replace multiple chars efficiently with scala?
我想将 5 个不同的字符替换为 5 个不同的字符,而我目前的做法看起来很愚蠢,那么更好的方法是什么?
目前:
private def fixChars(str: String): String = {
str.replaceAll("Ø","O")
str.replaceAll("ø", "o")
str.replaceAll("Ž","Z")
str.replaceAll("ž","z")
str.replaceAll("Ö","O")
}
?
好吧,您可以将字符替换包装到地图中:
def fixChars(str: String): String = {
val repl = Map(
"Ø" -> "O",
"ø" -> "o",
"Ž" -> "Z",
"ž" -> "z",
"Ö" -> "O"
)
repl.foldLeft(str) { case (cur, (from, to)) => cur.replaceAll(from, to) }
}
不确定它看起来是否更好。
我相信这种方法适合您,并且只需一次迭代即可替换所有字符:
private def fixChars(str: String): String = {
val substitutions = Map(
'Ø' -> 'O',
'ø' -> 'o',
...
)
str.map(c => substitutions.getOrElse(c, c))
}
我想将 5 个不同的字符替换为 5 个不同的字符,而我目前的做法看起来很愚蠢,那么更好的方法是什么?
目前:
private def fixChars(str: String): String = {
str.replaceAll("Ø","O")
str.replaceAll("ø", "o")
str.replaceAll("Ž","Z")
str.replaceAll("ž","z")
str.replaceAll("Ö","O")
}
?
好吧,您可以将字符替换包装到地图中:
def fixChars(str: String): String = {
val repl = Map(
"Ø" -> "O",
"ø" -> "o",
"Ž" -> "Z",
"ž" -> "z",
"Ö" -> "O"
)
repl.foldLeft(str) { case (cur, (from, to)) => cur.replaceAll(from, to) }
}
不确定它看起来是否更好。
我相信这种方法适合您,并且只需一次迭代即可替换所有字符:
private def fixChars(str: String): String = {
val substitutions = Map(
'Ø' -> 'O',
'ø' -> 'o',
...
)
str.map(c => substitutions.getOrElse(c, c))
}