Я знаю String#codePointAt(int)
, но он индексируется по char
смещению, а не по смещению кодовой точки.
Я думаю попробовать что-то вроде:
- используя
String#charAt(int)
для полученияchar
индекса - тестирование,
char
находится ли в диапазоне высоких суррогатов- если это так, используйте
String#codePointAt(int)
для получения кодовой точки и увеличьте индекс на 2 - если нет, используйте данное
char
значение в качестве кодовой точки и увеличьте индекс на 1
- если это так, используйте
Но меня беспокоит
- Я не уверен, будут ли кодовые точки, которые естественно находятся в диапазоне высоких суррогатов, храниться как два
char
значения или одно - это кажется ужасно дорогим способом перебора символов
- кто-то, должно быть, придумал что-то получше.