2016-09-20 9 views
0

5つの異なる文字を5つの異なる文字に置き換えたいのですが、現在のやり方では愚かに見えるので、これを行うにはどうすればよいでしょうか?現在複数の文字を効率的にスカラーに置き換える方法は?

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) } 
} 

それが良いということになりますかどうかわかりません。

関連する問題