我正在尝试为我的应用程序编写一个过滤器函数,该函数将采用输入字符串并以某种方式过滤掉与给定输入不匹配的所有对象。最简单的方法是使用String的contains方法,即仅检查对象(对象中的String变量)是否包含在过滤器中指定的字符串,但这不会考虑重音。
所讨论的对象基本上是Person,而我要匹配的字符串是名称。因此,例如,如果有人搜索Joao,我希望Joáo会包含在结果集中。我已经在我的应用程序中使用了Collator类来按名称进行排序,并且它可以进行比较,因为它可以进行比较,因此效果很好,即使用UK Localeá位于b之前但位于a之后。但是很明显,如果比较a和á,则它们不会返回0,因为它们不相等。
那么,有谁知道我将如何做到这一点?
利用java.text.Normalizer
正则表达式摆脱变音符号。
public static String removeDiacriticalMarks(String string) {
return Normalizer.normalize(string, Form.NFD)
.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}
您可以如下使用:
String value = "Joáo";
String comparisonMaterial = removeDiacriticalMarks(value); // Joao
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句