Java String.length() 回傳的是 char 代碼單元數量。對於 BMP 範圍內的中文字(\u4E00~\u9FFF),每個字佔 1 個 char,但常見業務需求視「一個中文=兩個字元寬度」。
public static int getCharLength(String content) {
int count = 0;
for (int i = 0, len = content.length(); i < len; ++i) {
char c = content.charAt(i);
if ('\u4E00' <= c && c <= '\u9FFF') { // CJK 統一表意文字基本區
count++;
}
}
return content.length() + count; // 中文額外 +1,等同中文算 2、英文算 1
}
\u4E00 ~ \u9FFF 涵蓋 20,902 個常用漢字count++,最終長度 = 原長度 + 中文字數char(surrogate pair),若需精確視覺寬度請用 codePointCount 或 ICU4Jjava.text.BreakIterator 或 sun.font.FontDesignMetrics 計算像素寬度