英語以外の文字を含む 2 つの文字列を比較したい
String1 = debarquer
String2 = débárquér
上記の 2 つの文字列を比較すると、等しいと言うべきです。
英語以外の文字を含む 2 つの文字列を比較したい
String1 = debarquer
String2 = débárquér
上記の 2 つの文字列を比較すると、等しいと言うべきです。
Collator クラスを使用します。強度とロケールを設定でき、文字を適切に比較します。
これに似たものになるはずです(注:プログラムはテストしていません)
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 になる可能性があります。これは明らかに良くありません。collator クラスを使用すると、これが正しく処理されます。
これを行うには、Java のNormalizerクラスを使用できます。文字列を正規化してから、次のように分音記号を取り除きます。
String stripAccents(String string) {
string = Normalizer.normalize(string, Normalizer.Form.NFD);
string = string.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}
これを使用して、アクセントを除いた 2 つの文字列を比較できます。
stripAccents(string1).equals(stripAccents(string2))
if (string1 != null){
if (string1.equals(string2)){
System.out.println("Equal");
}
else{
System.out.println("Not Equal");
}
Java で 2 つの文字列値を比較する方法があります。
if(String1.equals(String2))
{
System.out.println("Equal");
}
else
{
System.out.println("Not equal");
}