Похоже, что лучший способ получить правильность - не дать программистам выполнять «взлом строк» ... просто не нормально писать собственные процедуры переноса слов, переносов слов, подсчета слов, выравнивания, перемещения курсора и т. Д. Все современные фреймворки пользовательского интерфейса сделают это за вас.
То есть абстракция, с которой вы обычно работаете, это скорее «экранный объект абзаца», например, для GTK:
http://library.gnome.org/devel/pango/stable/pango-Layout-Objects.html
а не строка графемы, например:
http://library.gnome.org/devel/pango/stable/pango-Glyph-Storage.html
Чтобы добраться до строки глифов, вам нужна информация, доступная только на уровне «представления», поэтому в большинстве случаев использования строк эта информация может отсутствовать. Например, вы должны знать шрифт, потому что шрифты могут иметь разные лигатуры.
Помимо такого рода практических вопросов, глифы, вероятно, не то, что вы хотите.
Во многих контекстах вы хотите использовать надлежащие атрибуты Unicode, показанные в этом API, например:
http://library.gnome.org/devel/pango/stable/pango-Text-Processing.html#PangoLogAttr
Как вы можете видеть из этой структуры (которая отражает алгоритмы Unicode), делать разные вещи на границах глифов не более правильно, чем делать их на границах символов.
Эти две спецификации описывают алгоритмы для нахождения различных видов границ:
Обработка текста включает в себя поиск этих границ с помощью алгоритмов, а затем работу с границами.
Если вы начнете понимать, насколько сложно правильно обрабатывать все языки, вы очень быстро поймете, что вам нужна библиотека, которая просматривает целые абзацы и обрабатывает их правильно. Windows, Mac, Linux (Qt и GTK) и Java поставляются с возможностями для этого, плюс есть, например , http://site.icu-project.org/ .
Насколько я знаю, при написании веб-приложений, к сожалению, вы должны позволить браузеру (вероятно, помогающему ОС) делать это. Все, что вы можете сделать в JavaScript или на стороне сервера, это испортить.
Возможно, я бы подытожил ответ следующим образом: большинство манипуляций со строками в тексте на естественном языке не работает, так что не стоит беспокоиться о классе строк, за исключением того, что у него нет методов без него ;-)