Javastringsearch忽略重音

我正在尝试为我的应用程序编写一个筛选器函数,它将采用一个inputstring并以某种方式筛选出与给定input不匹配的所有对象。 最简单的方法是使用String的contains方法,即检查对象(对象中的Stringvariables)是否包含filter中指定的string,但是这不包含重音。

有问题的对象基本上是人,我想匹配的string是名字。 因此,例如,如果有人searchJoao,我希望Joáo被包含在结果集中。 我已经在我的应用程序中使用Collat​​or类来按名称进行sorting,并且效果很好,因为它可以进行比较,即使用英国语言​​区域设置,但是在之前。 但是,如果比较a和á,因为它们不相等,所以它不会返回0。

那么有没有人有任何想法,我可以做到这一点?

利用java.text.Normalizer和正则expression式来消除变音符号 。

 public static String removeDiacriticalMarks(String string) { return Normalizer.normalize(string, Form.NFD) .replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); } 

你可以使用如下:

 String value = "Joáo"; String comparisonMaterial = removeDiacriticalMarks(value); // Joao 

如果您将aconfiguration为忽略变音符号,collat​​or 确实会返回0。

 public boolean isSame(String a, String b) { Collator insenstiveStringComparator = Collator.getInstance(); insenstiveStringComparator.setStrength(Collator.PRIMARY); // Collator.PRIMARY also works, but is case senstive return insenstiveStringComparator.compare(a, b) == 0; } 

isSame(“a”,“á”)现在成真

我写了一个类,通过忽略变音符号(不删除它们)来search阿拉伯文本。 也许你可以得到这个想法或以某种方式使用它。

DiacriticInsensitiveSearch.java