開(kāi)發(fā)中經(jīng)常遇到,字符串過(guò)長(zhǎng),無(wú)法完全顯示的問(wèn)題
這時(shí)候就需要截取我們所需要的長(zhǎng)度,后面顯示省略號(hào)或其他字符。
由于中文字符占兩個(gè)字節(jié),而英文字符占用一個(gè)字節(jié),所以,單純地判斷字符數(shù),效果往往不盡如人意
下面的方法通過(guò)判斷字符的類(lèi)型來(lái)進(jìn)行截取,效果還算可以:)
如果大家有其他的解決方法歡迎貼出來(lái),共同學(xué)習(xí):)
**********************************************************************
private String str;
private int counterOfDoubleByte;
private byte b[];
/**
* 設(shè)置需要被限制長(zhǎng)度的字符串
* @param str 需要被限制長(zhǎng)度的字符串
*/
public void setLimitLengthString(String str){
? this.str = str;
}
/**
* @param len 需要顯示的長(zhǎng)度(<font color="red">注意:長(zhǎng)度是以byte為單位的,一個(gè)漢字是2個(gè)byte</font>)
* @param symbol 用于表示省略的信息的字符,如“...”,“>>>”等。
* @return 返回處理后的字符串
*/
public String getLimitLengthString(int len, String symbol) throws UnsupportedEncodingException {
? counterOfDoubleByte = 0;
? b = str.getBytes("GBK");
? if(b.length <= len)
??? return str;
? for(int i = 0; i < len; i++){
??? if(b[i] < 0)
????? counterOfDoubleByte++;
? }
? if(counterOfDoubleByte % 2 == 0)
??? return new String(b, 0, len, "GBK") + symbol;
? else
??? return new String(b, 0, len - 1, "GBK") + symbol;
}
本文轉(zhuǎn)貼自網(wǎng)友:focus2004 的文章