- 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
结果分析:
当截取后的字符串里面有奇数个英文字符,且最后一个是中文字符,这时会多出半个汉字长度
当截取后的字符串里面有偶数个英文字符,且最后一个是英文字符,这时会少出半个汉字长度
这是正常的