Ejemplo

public static void main(String[] args){
String str = "ABC\ud800\udc00"; //$NON-NLS-1$
char ch = str.charAt(3);
System.out.println("String.charAt(3) = 0x" + Integer.toHexString(ch)); //$NON-NLS-1$
System.out.println("La salida debe ser \"String.charAt(3) = 0x10000\""); //$NON-NLS-1$
}

public static void TestCharAt() {
String str = "a\u0300";
char ch = str.charAt(0);
System.out.println("String.charAt(0) = 0x" + Integer.toHexString(ch));
}
Solución
Utilice J2SE 1.5 java.lang.String.codePointAt (int)

public static void main(String[] args){
String str = "ABC\ud800\udc00";
int codepoint = str.codePointAt(3);
System.out.print("String.codePointAt(3) = 0x");
System.out.println(Integer.toHexString(codepoint));
}

Solución
Utilice ICU 2.6.1
  • com.ibm.icu.text.UTF16.charAt (char[], int, int, int)
  • com.ibm.icu.text.UTF16.charAt (Replaceable, int)
  • com.ibm.icu.text.UTF16.charAt (StringBuffer, int)
  • com.ibm.icu.text.UTF16.charAt (String, int)

public static void main(String[] args){
String str = "ABC\ud800\udc00"; //$NON-NLS-1$
int ch = com.ibm.icu.text.UTF16.charAt(str,3);
System.out.println("UTF16.charAt(str, 3) = 0x" + Integer.toHexString(ch)); //$NON-NLS-1$
}