import java.io.UnsupportedEncodingException;
public class StringUtil {
public static String subString(String text, int length, String endWith) {
int textLength = text.length();
int byteLength = 0;
StringBuffer returnStr = new StringBuffer();
for(int i = 0; i<textLength && byteLength < length*2; i++){
String str_i = text.substring(i, i+1);
if(str_i.getBytes().length == 1){//英文
byteLength++;
}else{//中文
byteLength += 2 ;
}
returnStr.append(str_i);
}
try {
if(byteLength<text.getBytes("GBK").length){//getBytes("GBK")每个汉字长2,getBytes("UTF-8")每个汉字长度为3
returnStr.append(endWith);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return returnStr.toString();
}
测试:
public static void main(String[] args) {
String text = "。发.。篇>所q阿s似hf的f**发千万s";
for(int i = 0; i< text.length();i++){
String s = StringUtil.subString(text,i+1,"...");
System.out.println(s+"--------------------------"+(i+1));
}
}
结果:
。...--------------------------1
。发...--------------------------2
。发.。...--------------------------3
。发.。篇...--------------------------4
。发.。篇>...--------------------------5
。发.。篇>所...--------------------------6
。发.。篇>所q阿...--------------------------7
。发.。篇>所q阿s...--------------------------8
。发.。篇>所q阿s似...--------------------------9
。发.。篇>所q阿s似hf...--------------------------10
。发.。篇>所q阿s似hf的...--------------------------11
。发.。篇>所q阿s似hf的f*...--------------------------12
。发.。篇>所q阿s似hf的f**...--------------------------13
。发.。篇>所q阿s似hf的f**发...--------------------------14
。发.。篇>所q阿s似hf的f**发千...--------------------------15
。发.。篇>所q阿s似hf的f**发千万...--------------------------16
。发.。篇>所q阿s似hf的f**发千万s--------------------------17
。发.。篇>所q阿s似hf的f**发千万s--------------------------18
。发.。篇>所q阿s似hf的f**发千万s--------------------------19
。发.。篇>所q阿s似hf的f**发千万s--------------------------20
。发.。篇>所q阿s似hf的f**发千万s--------------------------21
结果分析:
当截取后的字符串里面有奇数个英文字符,且最后一个是中文字符,这时会多出半个汉字长度
当截取后的字符串里面有偶数个英文字符,且最后一个是英文字符,这时会少出半个汉字长度
这是正常的