Java截取字符串问题

126 阅读1分钟

编写一个截取字符串的函数,输入一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截取半个,例如"人ABC"4,应该截为:"人AB",输入"人ABC们DEF",6,应该输出为“人ABC”而不是"人ABC+们的半个"

在Java语言中,默认使用Unicode编码方式,即每个字符占用2个字节,因此可以用来存储中文。虽然String 是由char所组成的,但是它采取了一种更加灵活地方式进行存储,即英文占一个字符,中文占2个字符。根据这个特点,可以完成题目所示的代码要求:

`public class Test1 { // 判断字符c是否是中文字符,如果是则返回true public static boolean isChinese(char c){ String sb=String.valueOf(c); return sb.getBytes().length>1?true:false; }

public String truncateStr(String str,int len){
    if(str==null||str.equals("")||len==0){
        return "";

        char[] chrArr;
        chrArr=str.toCharArray();
        StringBuilder sb;
        sb = new StringBuilder("");

// 用来记录当前截取字符串的长度 int count=0; for(char cc:chrArr){ if(count<len){ if(isChinese(cc)){ // 如果要求截取的子串长度只差了一个字符,但是接下来的字符是中文,则截取结果子串中不保存这个中文字符 if(count+1==len){ return sb.toString(); } count=count+2; sb=sb.append(cc); }else{ count=count+1; sb=sb.append(cc); } }else{ break; } } return sb.toString(); } }

public static void main(String[] args) {
    Test1 splitStr=new Test1();
    String sb="人ABC们DEF";
    System.out.println(splitStr.truncateStr(sb,6));
}

}`