2013-01-24 2 views
11

Является ли это приемлемым методом для удаления нескольких типов символов из строки или есть лучший (более эффективный способ)? Бит "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" 

ответ

25

Там не будет никакой существенной разницы, так как есть только 3 символов, чтобы удалить и не такой большой строки для фильтрации, но вы можете рассмотреть возможность использования набора для этой цели. Например.

val toRemove = "ilr".toSet 
val words = sentence.filterNot(toRemove) 
25

Я бы просто использовать в 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 

В отличие от работы с char с (как и в фильтрации Seq[Char]), используя регулярные выражения должны быть Unicode-safe, даже если вы работаете с кодовыми точками вне базовой многоязычной плоскости. "There Ain't No Such Thing As Plain Text."

+1

+1 Спасибо, я продолжаю забывать, насколько близка Ява. – Jack

+0

У вас может быть точка на «вне BMP». Но если вам все равно, вам лучше заняться тестированием - почти * нет такой вещи, как безопасное для BMP программное обеспечение Java (http://stackoverflow.com/a/2533118/53974). К счастью, SDK, по-видимому, является исключением, если вы используете правильные API-интерфейсы, а регулярные выражения - среди благословенных. http://www.oracle.com/us/technologies/java/supplementary-142654.html – Blaisorblade

Смежные вопросы