Ejemplo

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("Resultado = " + result); //$NON-NLS-1$

str = "\ud801\udc00"; //$NON-NLS-1$
str2 = "\ud801\udc28"; //$NON-NLS-1$
result = str.compareToIgnoreCase(str2);
System.out.println("Serie: Resultado(Omitir mayúsculas/minúsculas) = " + 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("Serie: Resultado(entorno local) = " + result); //$NON-NLS-1$
}
public static void TestCompareTo() {
String str = "\ud801\udc00";
String str2 = "\ud801\udc28";
String result = str.compareToIgnoreCase(str2);
System.out.println("Serie: Resultado(Omitir mayúsculas/minúsculas) = " + result);
}
public static void TestCompareTo() {
String str = "k";
String str2 = "y";
Locale.setDefault(new Locale("lt", "LT"));
result = str.compareTo(str2);
System.out.println("Serie: Resultado(entorno local) = " + result);
}
Solución
Si las series a comparar contienen caracteres suplementarios de Unicode (solo pueden utilizarse en series normalizadas)
Utilice ICU 2.6.1
  • 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: Resultado = " + 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: Resultado (Ignorar mayúsculas/minúsculas) = " + result); //$NON-NLS-1$
}
Solución
Si la comparación es sensible al entorno local o si la serie no está normalizada y es necesario utilizar los servicios de cotejo
  • 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("Cotejador: Resultado (Entorno local) = " + result); //$NON-NLS-1$
}