最短的“长度”是Unicode 代码点,作为编号字符的概念,UTF-32。
在java中8:
int length = (int) string.codePoints().count();
之前Java类:
int length(String s) {
int n = 0;
for (int i = 0; i < s.length(); ++n) {
int cp = s.codePointAt(i);
i += Character.charCount(cp);
}
return n;
}
甲Unicode代码点可以在UTF-16被编码为一个或两个char
秒。
相同的Unicode字符可能有变音符号。可以将它们编写为单独的代码点:基本字母+零个或更多变音符号。为了标准化的字符串一个(C =)压缩码点:
string = java.text.Normalizer.normalize(string, Normalizer.Form.NFC);
BTW数据库的目的,UTF-16长度似乎更加有用:
string.length() // Number of UTF-16 chars, every char two bytes.
(在该示例中提到的UTF-32长度== UTF-16的长度。)
转储功能
甲评论者有一些意想不到的结果:
void dump(String s) {
int n = 0;
for (int i = 0; i < s.length(); ++n) {
int cp = s.codePointAt(i);
int bytes = Character.charCount(cp);
i += bytes;
System.out.printf("[%d] #%dB: U+%X = %s%n",
n, bytes, cp, Character.getName(cp));
}
System.out.printf("Length:%d%n", n);
}
8个字符,其中每个字符都是UTF-16(两个字节)。这是Unicode文本如何存储在字符串中,如'char []'。 –
我没有检查字符串长度函数,我将它转换为UTF-8,然后计算长度。你的答案有助于简单地在文本上使用字符串长度,并且我得到了正确的答案。谢谢。 –