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