我正在尝试为我的应用程序编写一个过滤函数,该函数将采用输入字符串并过滤掉以某种方式与给定输入不匹配的所有对象。最简单的方法是使用 String 的 contains 方法,即仅检查对象(对象中的 String 变量)是否包含过滤器中指定的字符串,但这不会考虑重音。
有问题的对象基本上是人,而我试图匹配的字符串是名称。例如,如果有人搜索 Joao,我希望 Joáo 包含在结果集中。我已经在我的应用程序中使用了 Collator 类来按名称排序,它运行良好,因为它可以进行比较,即使用 UK Locale á 在 b 之前但 a 之后。但显然,如果比较 a 和 á ,它不会返回 0,因为它们不相等。
那么有人知道我该如何做到这一点吗?
利用java.text.Normalizer http://java.sun.com/javase/6/docs/api/java/text/Normalizer.html和一个正则表达式来摆脱变音符号 http://en.wikipedia.org/wiki/Diacritic.
public static String removeDiacriticalMarks(String string) {
return Normalizer.normalize(string, Form.NFD)
.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}
您可以按如下方式使用:
String value = "Joáo";
String comparisonMaterial = removeDiacriticalMarks(value); // Joao
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)