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