最短的「長度」是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,然後計算長度。你的答案有助於簡單地在文本上使用字符串長度,並且我得到了正確的答案。謝謝。 –