在編寫存入數(shù)據(jù)庫數(shù)據(jù)時帘瞭,一次碰見,字段過長歇僧,無法存入的尷尬图张。
數(shù)據(jù)庫長度為50,頁面中我截取45位诈悍,滿以為不會出錯祸轮。結(jié)果忽略了,一個中文字符的長度在數(shù)據(jù)庫中占的不是1侥钳。
中文GBK字符長度為2,UTF-8長度為3适袜,下面就是一個,判斷字符串舷夺,并截取指定長度的方法苦酱。如果長度超標,會向前截取给猾,并在最后加入三個英文字符...
例疫萤,字段保存到數(shù)據(jù)庫,要從保存50長度? 敢伸,但是
subString()扯饶,如果純漢字,能保存25,但是加上英文尾序,就多余25個
中文GBK字符長度為2,UTF-8長度為3
public class First01 {
/**
* 獲取存入數(shù)據(jù)庫字符串長度
* @param value? 需要截取字符串長度
* @return? 返回字符串長度
*/
public static int lengthOfUTF8(String value) {
? ? ? ? int valueLength = 0;
? ? ? ? if(value==null)
? ? ? ? {
? ? ? ? return valueLength;
? ? ? ? }
? ? ? ? String chinese = "[\u0391-\uFFE5]";
? ? ? ? /* 獲取字段值的長度钓丰,如果含中文字符,則每個中文GBK字符長度為2,UTF-8長度為3每币,否則為1 */
? ? ? ? for (int i = 0; i < value.length(); i++) {
? ? ? ? ? ? /* 獲取一個字符 */
? ? ? ? ? ? String temp = value.substring(i, i + 1);
? ? ? ? ? ? /* 判斷是否為中文字符 */
? ? ? ? ? ? if (temp.matches(chinese)) {
? ? ? ? ? ? ? ? /* 中文字符長度為2 */
? ? ? ? ? ? ? ? valueLength += 2;
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? /* 其他字符長度為1 */
? ? ? ? ? ? ? ? valueLength += 1;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return valueLength;
? ? }
}