16

これは、文字列から複数の文字タイプを削除するための受け入れ可能なアプローチですか、それともより良い (より効率的な) 方法がありますか? "ilr".contains(_)キャラクターごとに行われることを考えると、少しチートのように感じますが、繰り返しになりますが、これが正しい方法かもしれません. これを行うためのより高速または効率的な方法はありますか?

val sentence = "Twinkle twinkle little star, oh I wander what you are"

val words = sentence.filter(!"ilr".contains(_))   

// Result: "Twnke twnke tte sta, oh I wande what you ae"
4

2 に答える 2

34

Javaの古き良きものを使用するだけですreplaceAll(正規表現が必要です):

"Twinkle twinkle little star, oh I wander what you are" replaceAll ("[ilr]", "")
// res0: String = Twnke twnke tte sta, oh I wande what you ae

chars を操作する場合 ( a をフィルタリングする場合など)とは対照的にSeq[Char]、正規表現を使用すると、基本的な多言語面以外のコード ポイントを操作している場合でも、Unicode セーフである必要があります。「平文なんてものはない」

于 2013-01-24T07:50:09.673 に答える
30

削除する文字は 3 文字しかなく、フィルタリングする文字列もそれほど大きくないため、大きな違いはありませんが、この目的で Set を使用することを検討することもできます。例えば

val toRemove = "ilr".toSet
val words = sentence.filterNot(toRemove)
于 2013-01-24T07:02:30.180 に答える