我有一个带有unicode字符的List[String]
,例如
val languages = List("Deutsch","english","español")
val results = languages.filter(_.contains("espan"))
results: List[String] = List()
但我希望它找到List(español)
。有没有一种好的/快速的方法来实现像德国ä,ö,ü这样的角色呢?
答案 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的。
这样做的一个副作用是返回没有变音符号的字符串。你可能不希望这样,但我会留下它作为练习让你返回原版,因为你可以在没有变音符号的情况下进行比较。