scala字符串。包含unicode
我有一个带有unicode字符的scala字符串。包含unicode,scala,unicode,Scala,Unicode,我有一个带有unicode字符的列表[String],例如 val languages = List("Deutsch","english","español") val results = languages.filter(_.contains("espan")) results: List[String] = List() 但是我想让它找到列表(español)。有没有一个好的/快速的方法来实现像德语的ä,ö,ü这样的字符呢?像这样: scala> import java.text.
列表[String]
,例如
val languages = List("Deutsch","english","español")
val results = languages.filter(_.contains("espan"))
results: List[String] = List()
但是我想让它找到列表(español)
。有没有一个好的/快速的方法来实现像德语的ä,ö,ü这样的字符呢?像这样:
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”函数,可以在执行包含(“espan”)
之前与映射列表一起使用。关键是要理解,当模式\p{M}
匹配任何非unicode的字符时,规范化程序会将变音符号与字母字符分开
这样做的一个副作用是返回不带变音符号的字符串。您可能不想这样做,但我将把它作为一种练习留给您,让您返回原始版本,因为您可以在不使用变音符号的情况下进行比较。具体实现什么?部分匹配?将一些unicode字符翻译成英语?什么时候应该返回
List(“español”)
,什么时候不应该返回?我希望它在espan
以及españ
上返回。请查看以下内容:可能的重复。答案中有可以使用的Java解决方案。