/**
* 从原字符串根据最大字节长度以及需要保留的字节长度,获取子字符串,“最大字节长度”用于判断原字符串字节长度是否超过该长度,如果超过则截取“需要保留的字节长度”子串并补充“...”返回,如果未超过,则直接返回原字符串;<br>
* 这里考虑到其中有中文的情况,如果最后一个字节为中文的一半,则去掉该字节,显示字节长度为“需截字节长度-1”;<br>
* 如果输入需要截取的字节长度超过了当前传入字符串的字节长度,则返回全部字符串,不报异常;<br>
* 如果需要截取的字节长度小于当前字符串的长度,则在考虑中文情况下截取指定的字符串,并补充“...”返回。<br>
* @param str 原字符串
* @param maxBytesLength 最大字节长度(如果原字符串的字节长度超过该长度,就需要做字符截取处理,否则直接返回原字符串)
* @param keepBytesLength 需要保留的字节长度
* @param needMore 是否需要补充"..."
* @return
* @throws UnsupportedEncodingException
*/
public static String subString(String str, int maxBytesLength,int keepBytesLength, boolean needMore) {
int chineseByteNum = 0;
byte bt[] = null;
try {
bt = str.getBytes(CHARSET_GBK);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(bt.length<=maxBytesLength) return str;
for (int i = 0; i < keepBytesLength; i++) {
if (bt[i] < 0) {//中文
chineseByteNum++;
}
}
if (!(chineseByteNum % 2 == 0)) {//在截取的范围内中文刚好截取完,不存在半个中文的情况
keepBytesLength--;
}
StringBuffer substrx=new StringBuffer("");
try {
substrx = substrx.append(new String(bt, 0, keepBytesLength,CHARSET_GBK));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(needMore){
substrx.append("...");
}
return substrx.toString();
}