Java 比较忽略重音字符的字符串

Java 比较忽略重音字符的字符串,java,string,compare,accent-insensitive,Java,String,Compare,Accent Insensitive,我想知道是否有一种方法可以比较两个字符串并忽略使“noção”等于“nocao”的重音。 它类似于string1.MethodCompareIgnoracent(string2) 没有内置的方法来执行此操作,因此您必须构建自己的: 该解决方案的一部分来自: 这首先将所有带重音的字符拆分为不带重音的对应字符,然后是组合变音符号。然后,您只需删除所有组合变音符号。 也看到 然后,您的equals方法将如下所示: import java.text.Normalizer; import java.tex

我想知道是否有一种方法可以比较两个字符串并忽略使“noção”等于“nocao”的重音。
它类似于string1.MethodCompareIgnoracent(string2)

没有内置的方法来执行此操作,因此您必须构建自己的:

该解决方案的一部分来自: 这首先将所有带重音的字符拆分为不带重音的对应字符,然后是组合变音符号。然后,您只需删除所有组合变音符号。 也看到

然后,您的equals方法将如下所示:

import java.text.Normalizer;
import java.text.Normalizer.Form;

public boolean equals(Object o) {
    // Code omitted
    if (yourField.equals(removeAccents(anotherField))) {
        return true;
    }
}

public static String removeAccents(String text) {
    return text == null ? null : Normalizer.normalize(text, Form.NFD)
            .replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}

您可以使用java collator来比较测试,忽略重音,请参见一个简单示例:

import java.text.Collator;

/**
 * @author Kennedy
 */
public class SimpleTest
{

  public static void main(String[] args)
  {
    String a = "nocao";
    String b = "noção";

    final Collator instance = Collator.getInstance();

    // This strategy mean it'll ignore the accents
    instance.setStrength(Collator.NO_DECOMPOSITION);

    // Will print 0 because its EQUAL
    System.out.println(instance.compare(a, b));
  }
}
文件:


我不会详细解释,因为我只使用了一点拼贴器,我不是这方面的专家,但你可以在谷歌上搜索一些关于它的文章。

你看过了吗?你也可以看看。我编写了一个类,通过忽略发音符号(而不是删除它们)来搜索阿拉伯语文本。也许你可以得到这个想法,或者以某种方式使用它。非常感谢。不知道Collatorthis不起作用,它不会打印0。有时会打印-1,有时会打印1。如果行得通,请在编辑威斯顿密码之前获取密码。您的第一个答案行得通。现在我想编辑答案,以便它显示您的答案,您现在知道我如何可以做到吗?做到了!如果你愿意,你也可以再次接受这个asnwer。