根据字节数截取字符串

问题描述:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,例如“人abc”4,应该截为“人ab”;输入“人abc们”6,应该截为“人abc”,而不是截为“人ab+们的半个”

package com.wyl;
/**
 * 截取字符串
 * @author wyl
 *
 */
public class InterceptStr {

    /**
     * 判断字符是否为中文
     * @param c
     * @return
     */
    public boolean isChinese(char c){
        String sb = String.valueOf(c); //将字字符转化成字符串的形式
        return sb.getBytes().length == 1 ? false : true;
    }
    /**
     * 截取字符串
     * @param str 字符串
     * @param len 要截取的字节数
     * @return 截取的字符串
     */
    public String interceptStr(String str, int len){
        if(len==0 || str==null || str.equals("")){
            return "";
        }else if(len<0){
            System.out.println("参数len输入非法");
        }
        char[] chars = str.toCharArray(); //将字符串转换成字符数组,中文占用两个字符,英文占用一个字符
        StringBuilder sb = new StringBuilder();
        int count = 0; //用来截取当前截取的字符串的长度
        for(char cc:chars){
            if(count < len){
                if(isChinese(cc)){
                    //如果要求截取的字符串长度只差一,但是接下来是中文字符
                    //则截取子串中不包括这个中文字符
                    if(count+1 == len){
                        return sb.toString();
                    }else{
                        count = count+2;
                        sb.append(cc);
                    }
                }else{
                    count = count+1;
                    sb.append(cc);
                }
            }else{
                break;
            }
        }
        return sb.toString();
    }
    
    public static void main(String[] args) {
        InterceptStr interceptStr = new InterceptStr();
        String str = "abc王xb亚";
        String s = interceptStr.interceptStr(str, -1);
        System.out.println(s);
    }
}
posted @ 2017-07-24 14:47  Miss_wang  阅读(1979)  评论(1编辑  收藏  举报