Хорошо, прочитав пост Джона и все еще размышляя о суррогатах в Java, я решил быть немного менее ленивым и заняться поиском. На самом деле есть поддержка суррогатов в классе Character, это немного .. обходной
Итак, вот код, который будет работать правильно, при условии правильного ввода:
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (Character.isHighSurrogate(ch)) {
System.out.println("Codepoint: " +
Character.toCodePoint(ch, str.charAt(i + 1)));
i++;
}
System.out.println("Codepoint: " + (int)ch);
}