您也可以通过将字符串转换为NFC规范分解来解决您的问题。基本上,java.text.Normalizer类可用于组合重音符号和其他组合字符及其基本字符,因此您将能够正确地进行反转。
所有其他这些想法(String.reverse(),StringBuffer.reverse())将正确反转缓冲区中的字符,但是如果以分解的字符开头,则可能无法获得期望的结果:)。
在某些“分解形式”中,重音字符与其基本形式分开存储(作为单独的字符),但在“组合”形式中却不是。因此,“
ae”以一种形式存储为三个字符,而另一种以组合形式存储为两个字符。
但是,这样的规范化不足以处理其他类型的字符组合,也无法解决Unipre星体平面中的字符,这些字符在Java中存储为两个字符(或更多?)。
感谢tchrist指出了ICU对文本分割的支持,包括扩展的字素簇,例如下面的注释中所标识的(参见virama)。
此资源似乎是此类资料的权威信息来源。



