Java中截取字串的方法有很多,一般的情況下,我習慣使用Apache的StringUtils
來處理。這是用來將字串進行縮寫的。不過StringUtils的字串截取,是根據char來截取。中文字算一個char、英文字算一個char。長度500的字串,就是500個字。範例如下:
StringUtils.abbreviate(str, maxWidth);
在某些資料庫中, 例如Oracle,可以開立欄位長度為單位為byte的欄位(varchar2(n byte)
),這種欄位形不分中英文長度。當需要將適當長度的字串存入這樣的資料庫欄位時,截取長度的基準,就需要使用byte來計算。而中文字一般佔3byte,英文字是1 byte。有另外一種說法是中文字佔2byte,不過不管長度是多少,反正歐亞字元的編碼長度,就跟密碼一樣,我都搞不清。不過這並不影響我面接下來的內容。所以長度500的字串,在中英文夾雜的情況下,肯定不到500個字。解決的方法,主要是用Arrays.copyOf()
這個method。
private String abbreviate(String s) {
byte[] sb = s.getBytes();
final int max = 480;
byte[] newsb = Arrays.copyOf(sb, max);
return new String(newsb).trim();
}
沒有留言 :
張貼留言