2016-09-20 83 views
0

我想將5個不同的字符替換爲5個不同的字符,目前的做法看起來很愚蠢,那麼更好的方法是做什麼?如何用scala有效地替換多個字符?

目前:

private def fixChars(str: String): String = { 
    str.replaceAll("Ø","O") 
    str.replaceAll("ø", "o") 
    str.replaceAll("Ž","Z") 
    str.replaceAll("ž","z") 
    str.replaceAll("Ö","O") 
} 

+4

請定義「好」。你的代碼看起來很好,除了你忽略了'replaceAll'調用的結果。 – Seelenvirtuose

+0

@Seelenvirtuose你是什麼意思「忽略結果」? – Joe

+0

'replaceAll'方法返回包含_modified_字符串的結果。它不會修改原始字符串。 – Seelenvirtuose

回答

4

我相信這種方法會爲你工作,只需要一次迭代來代替所有字符:

private def fixChars(str: String): String = { 
    val substitutions = Map(
    'Ø' -> 'O', 
    'ø' -> 'o', 
    ... 
) 
    str.map(c => substitutions.getOrElse(c, c)) 
} 
2

好了,你可以換字符替換成圖:

def fixChars(str: String): String = { 
    val repl = Map(
     "Ø" -> "O", 
     "ø" -> "o", 
     "Ž" -> "Z", 
     "ž" -> "z", 
     "Ö" -> "O" 
    ) 
    repl.foldLeft(str) { case (cur, (from, to)) => cur.replaceAll(from, to) } 
} 

不知道,如果它看起來更好。

相關問題