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