15

我想比较其中有一些非英文字符的 2 个字符串

String1 = debarquer
String2 = débárquér

在比较上述两个字符串时,他们应该说相等。

4

4 回答 4

23

使用 Collat​​or 类。它允许您设置强度和语言环境,它将适当地比较字符。

它应该与此类似(注意:我尚未测试该程序)

import java.text.Collator;
import java.util.Locale;

public class CollatorExp {

    public static void main(String[] args) {
        Collator collator = Collator.getInstance(Locale.FRENCH);
        collator.setStrength(Collator.PRIMARY);

        if (collator.compare("débárquér", "debarquer") == 0) {
            System.out.println("Both Strings are equal");
        } else {
            System.out.println("Both Strings are not equal");
        }
    } 
}

更新:需要注意的一点是,“débárquér”和“debarquer”永远不应被视为平等。但是,如果您要将它们分类,那么您不希望根据它们的 ASCII 值来比较它们。以“Joao”和“João”为例:如果根据 ASCII 对它们进行排序,可能会得到 Joao、John、João。这显然不好。使用 collat​​or 类可以正确处理这个问题。

于 2012-10-17T05:54:35.990 回答
11

为此,您可以使用 Java 的Normalizer类。只需规范化字符串,然后去掉变音符号,如下所示:

String stripAccents(String string) {
    string = Normalizer.normalize(string, Normalizer.Form.NFD);
    string = string.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}

然后,您可以使用它来比较两个字符串减去重音符号:

stripAccents(string1).equals(stripAccents(string2))
于 2012-10-17T05:57:17.047 回答
-2
if (string1 != null){
if (string1.equals(string2)){
System.out.println("Equal");
}
else{
System.out.println("Not Equal");
}
于 2012-10-17T05:54:18.260 回答
-3

有一种方法可以在 java 中比较 2 个字符串值。

        if(String1.equals(String2))
        {
           System.out.println("Equal");
        }
        else
        {
           System.out.println("Not equal");
        }
于 2012-10-17T05:57:00.063 回答