scala String .contains unicode

时间:2014-11-06 01:48:25

标签: scala unicode

我有一个带有unicode字符的List[String],例如

val languages = List("Deutsch","english","español")
val results = languages.filter(_.contains("espan"))
results: List[String] = List()

但我希望它找到List(español)。有没有一种好的/快速的方法来实现像德国ä,ö,ü这样的角色呢?

1 个答案:

答案 0 :(得分:0)

像这样:

scala> import java.text.Normalizer
import java.text.Normalizer

scala>  def removeDiacritics(in: String) : String = {
     |     // Separate accents from characters and then remove non-unicode characters
     |     Normalizer.normalize(in, Normalizer.Form.NFD).replaceAll("\\p{M}", "")
     |   }
removeDiacritics: (in: String)String

scala>  val languages = List("Deutsch","english","español")
languages: List[String] = List(Deutsch, english, español)

scala>   val results = languages.map(removeDiacritics).filter(_.contains("espan"))
results: List[String] = List(espanol)

scala> 

此处的解决方案提供了“removeDiacritics”功能,可以在执行contains("espan")之前映射列表。关键是要理解规范化器将变音符号与字母字符分开,而模式\p{M}匹配任何非变音符号不是unicode的。

这样做的一个副作用是返回没有变音符号的字符串。你可能不希望这样,但我会留下它作为练习让你返回原版,因为你可以在没有变音符号的情况下进行比较。