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