查找字符串长度的常用方法似乎失败
它们不会失败,将字符串长度报告为Unipre字符[*]的数量。如果您需要其他行为,则需要明确定义“字符串长度”的含义。
如果您对用于显示目的的字符串长度感兴趣,那么通常您会对计数像素(或其他逻辑/物理单位)感兴趣,这就是显示层的责任(首先,您可能对不同的字符使用不同的宽度,如果字体不是等宽的)。
但是,如果你只是有兴趣在计数的数量字形(
“在特定的书写系统的情况下写的最小单位鲜明”
),这里是个不错的指南与代码及实例。从那里复制-修剪-
粘贴相关代码,我们将得到以下内容:
public static int getGraphemeCount(String text) { int graphemeCount = 0; BreakIterator graphemeCounter = BreakIterator.getCharacterInstance(); graphemeCounter.setText(text); while (graphemeCounter.next() != BreakIterator.DONE)graphemeCount++; return graphemeCount; }请记住:以上使用默认值
locale。更灵活和强大的方法将,例如,获得一个确实
locale的说法,并调用
BreakIterator.getCharacterInstance(locale)代替
[*]准确地说,正如注释中指出的那样,
String.length()计数 Java字符
,实际上是UTF-16编码中的代码单元。仅当我们在BMP中时,这等效于计数Unipre字符。



