解決 substring 按字元截取導致中英文混雜時位元組長度不符的問題,提供按實際位元組長度累加截取的演算法,確保中英混排不斷字。
int i = 0;
String tempstr = "";
for (int j = 0; j < str.length(); j++) {
// 累加字元的位元組長度 (中文通常 3 bytes UTF-8, 英文 1 byte)
i += String.valueOf(str.charAt(j)).getBytes().length;
if (i <= 25) { // 目標位元組上限
tempstr += String.valueOf(str.charAt(j));
}
}
if (tempstr.length() != str.length()) {
str = tempstr + "..."; // 超過則加省略號
}
VARCHAR2(25 BYTE) 需前端預截取。getBytes() 無參數時使用平台預設編碼 (通常 UTF-8),建議明確指定 getBytes("UTF-8")。codePointAt 與 Character.charCount 處理。