Sembra che il modo migliore per ottenere la correttezza sia quello di impedire ai programmatori di eseguire "string hacking" ... semplicemente non è corretto scrivere il proprio wrap, sillabazione, conteggio parole, giustificazione, movimento del cursore, ecc. . Tutti i moderni framework per l'interfaccia utente ti faranno queste cose per te in questi giorni.
Cioè, l'astrazione con cui di solito lavori è più di un "oggetto di visualizzazione del paragrafo", come per GTK:
link
piuttosto che una stringa grapheme, ad esempio:
link
Per ottenere una serie di glifi hai bisogno di informazioni che sono disponibili solo a livello "vista", quindi la maggior parte degli usi delle stringhe potrebbero non avere queste informazioni. Ad esempio, devi conoscere il carattere, perché i caratteri possono avere legature diverse.
A parte questo genere di problemi pratici, probabilmente glifi non sono quello che vuoi.
In molti contesti, si desidera utilizzare gli attributi Unicode corretti, mostrati in questa API per esempio:
link
Come puoi vedere da quella struttura (che riflette gli algoritmi Unicode) fare varie cose ai confini degli glifi non è più corretto di farlo ai confini dei caratteri.
Queste due specifiche descrivono gli algoritmi per trovare diversi tipi di limiti:
L'elaborazione del testo comporta la ricerca di quei confini con gli algoritmi e quindi il lavoro con i limiti.
Se inizi a indagare su quanto sia difficile gestire correttamente tutte le lingue, ti renderai conto rapidamente che hai bisogno di una libreria che guardi interi paragrafi e li gestisca correttamente. Windows, Mac, Linux (Qt e GTK) e Java sono tutti dotati di funzionalità per questo, inoltre c'è link per esempio.
Quando si scrivono applicazioni web, sfortunatamente è necessario lasciare che il browser (probabilmente aiutato dal sistema operativo) esegua questa operazione, per quanto ne so. Tutto ciò che puoi fare in JavaScript o sul lato server è rovinare.
Forse riassumo la risposta come: la maggior parte della manipolazione delle stringhe sul testo in linguaggio naturale è interrotta, quindi non c'è molto da preoccuparsi della classe string, a parte forse avere uno senza metodi su di esso; -)