java截取中英文混合字符串 等宽显示

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


结果分析:
当截取后的字符串里面有奇数个英文字符,且最后一个是中文字符,这时会多出半个汉字长度
当截取后的字符串里面有偶数个英文字符,且最后一个是英文字符,这时会少出半个汉字长度

这是正常的

你可能感兴趣的:(java,F#)