15

英語以外の文字を含む 2 つの文字列を比較したい

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

上記の 2 つの文字列を比較すると、等しいと言うべきです。

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}+", "");
}

これを使用して、アクセントを除いた 2 つの文字列を比較できます。

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 に答える