在Java中,要計算UTF字符串的長度,不能直接使用length()
方法,因為該方法返回的是字符數(shù),而不是字節(jié)數(shù)。對于UTF-8編碼的字符串,一個字符可能占用1到4個字節(jié)。為了準確計算UTF字符串的字節(jié)長度,可以使用以下方法:
public static int utf8Length(String str) {
int length = 0;
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if ((ch & 0xC0) != 0x80) { // 判斷是否為ASCII字符
length++;
} else if ((ch & 0xE0) != 0xC0) { // 判斷是否為3字節(jié)字符
length += 2;
} else if ((ch & 0xF0) != 0xE0) { // 判斷是否為4字節(jié)字符
length += 3;
} else { // 判斷是否為5字節(jié)字符(實際上UTF-8中不存在5字節(jié)字符)
length += 4;
}
}
return length;
}
這個方法會遍歷字符串中的每個字符,檢查其前幾位以確定它是一個單字節(jié)字符、雙字節(jié)字符、三字節(jié)字符還是四字節(jié)字符。然后,根據(jù)字符的字節(jié)數(shù)累加長度計數(shù)器。最后,返回累加后的長度。