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