Java截取字符串军令状汉字不被截取半个

Java截取字符串保证汉字不被截取半个
Java截取字符串保证汉字不被截取半个

public class SplitString {


public static void main(String[] args) {
        String str = "我ABC汉DEF";
        //str = split(str, 6);
        str = truncate(str,7);
        System.out.println(str);
    }
 
    public static String split(String arg0, int arg1) {
        char[] carr = arg0.toCharArray();
        int il = carr.length;
        for (int i = 0; i < arg1 && i < il; i++) {
            if (carr[i] > 0xFF) {
                arg1--;
            }
        }
        int x = arg1 > 0 ? arg1 : 0;
        x = arg1 < il ? arg1 : il;
        return arg0.substring(0, x);
    }

    public static String truncate(String str, int byteLength) {
        if (str == null) {
            return null;
        }
        if (str.length() == 0) {
            return str;
        }
        if (byteLength < 0) {
            throw new IllegalArgumentException("Parameter byteLength must be great than 0");
        }
        char[] chs = str.toCharArray();
        int i = 0;
        int len = 0;
        while ((len < byteLength) && (i < chs.length)) {
            len = (chs[i++] > 0xff) ? (len + 2) : (len + 1);
        }
        if (len > byteLength) {
            i--;
        }
        return new String(chs, 0, i);
    }


}

Js截取字符串保证汉字不被截取半个:

/**
* 截取字符串:一个汉字相当于两个英文或数字字符,汉字不被截取半个
* @param str:需要截取的字符串
* @param len:截取的长度(一个汉字占两个长度)
*/
function cutstr(str,len){
var str_length = 0;
var str_len = 0;
str_cut = new String();
str_len = str.length;
for(var i = 0;i<str_len;i++){
a = str.charAt(i);
str_length++;
if(escape(a).length > 4){//中文字符的长度经编码之后大于4
str_length++;
}
str_cut = str_cut.concat(a);
if(str_length>=len){
str_cut = str_cut.concat("...");
return str_cut;
}
    }
    //如果给定字符串小于指定长度,则返回源字符串;
    if(str_length<len){
     return  str;
    }
}

转自: http://www.blackswansoft.com/songhaikang/article/20110517220909230.html