串的長度可以不同地被解釋-

  • 炭灰的數字在串的
  • 字符的數字在串的
  • 字节数在串的

String.length ()準確地給您炭灰的数量在串的。

然而炭灰不一定是一個完全字符。 為什麼?
補充字符存在於Unicode charset。 這些是有在被設置的基地之上的代码点的字符,并且他們比0xFFFF有價值偉大。 他們一直延伸由0×10FFFF決定。

在Java,這些補充字符代表作為代理人對,對在一個指定范围落的炭灰單位。 主導或高代理人價值在0xD800通过0xDBFF範圍。 落後或低值代理人在0xDC00通过0xDFFF範圍。

J2SE 5.0 API有一個新的串方法: 告诉您的codePointCount (int beginIndex, int endIndex)多少個Unicode代码点在二個索引之間。 给定值提到代碼單位或燒焦地點,因此endIndex -整個串的beginIndex與串的長度是等效的。

因此:
int characterLength = myString.codePointCount (0, charLength);

作为以前:
int charLength = myString.length ();

除非您計劃賣您的軟件到中國或日本(讀國際化)您是不太可能遇到在charLength和characterLength之间的任何区别。

因此多少個字節在串?
int byteCount = myString.getBytes () .length;

getBytes轉換它的Unicode字符成遺產charset除是Unicode而不是遺產charset multibyte內碼的UTF-8之外。 它然後退回在字節列陣的字符。

帽子技巧: 這裡 Joconner