Wiem o tym String#codePointAt(int)
, ale jest indeksowany przez char
przesunięcie, a nie przez przesunięcie punktu kodowego.
Myślę o spróbowaniu czegoś takiego:
- używając
String#charAt(int)
do uzyskaniachar
at indeksu - testowanie, czy
char
jest w zakresie wysokich surogatów- jeśli tak, użyj,
String#codePointAt(int)
aby uzyskać kod i zwiększ indeks o 2 - jeśli nie, użyj podanej
char
wartości jako punktu kodowego i zwiększ indeks o 1
- jeśli tak, użyj,
Ale moje obawy są
- Nie jestem pewien, czy punkty kodowe, które naturalnie znajdują się w zakresie z wysokim surogatem, będą przechowywane jako dwie
char
wartości, czy jedna - wydaje się to okropnie kosztownym sposobem na iterację postaci
- ktoś musiał wymyślić coś lepszego.