Эти другие ответы верны, но есть одна очень важная вещь, которую вы должны знать. Вы никогда не должны использовать chatAt
! Вы должны использовать только codePointAt
.
Точно так же вы не должны слепо использовать i++
, чтобы натолкнуться на строку. Вам нужно посмотреть, может ли s.codePointAt(i) > Character.MAX_VALUE
знать, дать ли дополнительный i++
кикер.
Например, чтобы распечатать все кодовые точки в String s
в стандартном формате «U +»:
private static void say_U_contents(String s) {
System.out.print("U+");
for (int i = 0; i < s.length(); i++) {
System.out.printf("%X", s.codePointAt(i));
if (s.codePointAt(i) > Character.MAX_VALUE) { i++; } // UG!
if (i+1 < s.length()) { System.out.printf("."); }
}
}
Таким образом, вы можете выводить как U+61.DF
, U+3C3
и U+1F4A9.1F4A9
для соответствующих строк. Последний выглядит как "\uD83D\uDCA9\uD83D\uDCA9"
, что просто безумие.