我正在尝试为我的应用程序编写一个过滤器函数,该函数将采用输入字符串并以某种方式过滤掉所有与给定输入不匹配的对象。最简单的方法是使用 String 的 contains 方法,即只检查对象(对象中的 String 变量)是否包含过滤器中指定的字符串,但这不会考虑重音符号。
有问题的对象基本上是人,而我要匹配的字符串是名称。因此,例如,如果有人搜索 Joao,我希望 Joáo 会包含在结果集中。我已经在我的应用程序中使用了 Collator 类来按名称排序,它运行良好,因为它可以进行比较,即使用 UK Locale á 在 b 之前但在 a 之后。但很明显,如果您比较 a 和 á,它不会返回 0,因为它们不相等。
那么有没有人知道我是如何做到这一点的?
最佳答案
利用 java.text.Normalizer
和一个正则表达式来摆脱 diacritics .
public static String removeDiacriticalMarks(String string) {
return Normalizer.normalize(string, Form.NFD)
.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}
你可以使用如下:
String value = "Joáo";
String comparisonMaterial = removeDiacriticalMarks(value); // Joao
关于Java字符串搜索忽略重音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2397804/