2013-01-24 37 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 s工作(如滤波Seq[Char]),使用正则表达式应该是即使您使用基本多语言平面以外的代码点,也可以使用Unicode安全。 "There Ain't No Such Thing As Plain Text."

+1

+1谢谢,我总是忘记的Java是多么接近。 – Jack

+0

你可能在“BMP之外”有一个点。但是如果你关心,你最好忙于测试 - 几乎没有像BMP安全的Java软件那样的东西(http://stackoverflow.com/a/2533118/53974)。 幸运的是,如果您使用正确的API,则SDK显然是一个例外,并且正则表达式也是有福的。 http://www.oracle.com/us/technologies/java/supplementary-142654.html – Blaisorblade