2016-09-20 1 views
0

Ich möchte 5 verschiedene Zeichen zu 5 verschiedenen Zeichen ersetzen, und die aktuelle Art, es zu tun, sieht dumm aus, also was wäre ein besserer Weg, dies zu tun?Wie man mehrere Zeichen effizient mit scala ersetzt?

derzeit:

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

?

+4

Bitte definieren „besser“. Ihr Code sieht gut aus, außer dass Sie das Ergebnis des 'replaceAll'-Aufrufs ignorieren. – Seelenvirtuose

+0

@Seelenvirtuose was meinst du "das Ergebnis ignorieren"? – Joe

+0

Die Methode 'replaceAll' gibt ein Ergebnis zurück, das die Zeichenfolge _modified_ enthält. Es ändert nicht die ursprüngliche Zeichenfolge. – Seelenvirtuose

Antwort

4

Ich glaube, dieser Ansatz für Sie arbeiten und dauert nur eine Iteration alle Zeichen ersetzen:

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

Nun, man konnte die Zeichen wickeln Ersetzungen in einer Karte:

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

Nicht sicher, ob es, das besser aussieht.

Verwandte Themen