scala字符串。包含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.

我有一个带有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.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解决方案。