Példa

public static void main( String[] args ){
String str = "\uFF10"; //$NON-NLS-1$
String str2 = "\uD800\uDC00"; //$NON-NLS-1$
int result = str.compareTo(str2);
System.out.println("Result = " + result); //$NON-NLS-1$

str = "\ud801\udc00"; //$NON-NLS-1$
str2 = "\ud801\udc28"; //$NON-NLS-1$
result = str.compareToIgnoreCase(str2);
System.out.println("String: Result(Ignore case) = " + result); //$NON-NLS-1$

str = "k"; //$NON-NLS-1$
str2 = "y"; //$NON-NLS-1$
Locale.setDefault(new Locale("lt", "LT")); //$NON-NLS-1$ //$NON-NLS-2$
result = str.compareTo(str2);
System.out.println("String: Result(locale) = " + result); //$NON-NLS-1$
}
public static void TestCompareTo() {
String str = "\ud801\udc00";
String str2 = "\ud801\udc28";
String result = str.compareToIgnoreCase(str2);
System.out.println("String: Result(Ignore case) = " + result);
}
public static void TestCompareTo() {
String str = "k";
String str2 = "y";
Locale.setDefault(new Locale("lt", "LT"));
result = str.compareTo(str2);
System.out.println("String: Result(locale) = " + result);
}
Megoldás
Ha az összehasonlítandó karaktersorozatok Unicode kiegészítő karaktereket tartalmaznak (csak normalizált karaktersorozatokon használható)
Használjon ICU 2.6.1-et
  • com.ibm.icu.text.UTF16.StringComparator (Object, Object)
  • com.ibm.icu.text.UTF16.StringComparator (String, String)

public static void main( String[] args ){
String str = "\uFF10"; //$NON-NLS-1$
String str2 = "\uD800\uDC00"; //$NON-NLS-1$
UTF16.StringComparator compare = new UTF16.StringComparator(true, false, UTF16.StringComparator.FOLD_CASE_DEFAULT);
int result = compare.compare(str, str2);
System.out.println("UTF16.StringComparator: Result = " + result); //$NON-NLS-1$

str = "\ud801\udc00"; //$NON-NLS-1$
str2 = "\ud801\udc28"; //$NON-NLS-1$
UTF16.StringComparator compare2 = new UTF16.StringComparator(true, true, UTF16.StringComparator.FOLD_CASE_DEFAULT);
result = compare2.compare(str, str2);
System.out.println("UTF16.StringComparator: Result (Ignore case) = " + result); //$NON-NLS-1$
}
Megoldás
Ha az összehasonlítás területi beállítás érzékeny vagy ha a karaktersorozat nincs normalizálva és leválogatási szolgáltatások használatára van szükség
  • java.text.Collator.compare (Object, Object)
  • java.text.Collator.compare (String, String)

public static void main(String[] args){
Collator collator = Collator.getInstance(new Locale("lt", "LT")); //$NON-NLS-1$ //$NON-NLS-2$
String str = "k"; //$NON-NLS-1$
String str2 = "y"; //$NON-NLS-1$
int result = collator.compare(str, str2);
System.out.println("Collator: Result (Locale) = " + result); //$NON-NLS-1$
}