要求:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”String.substring(int,int)方法只能按规定int输出子字符串,如果遇到汉字的话,该如何判断它占两个字节呢?

解决方案 »

  1.   

    你对substring不清楚呀
    substring是按照char来取的,不是按照byte来取的
    "哈哈",byte是4个,但char是2个不会出现你说的问题
      

  2.   

    int maxLen = 8;
                String name = "lasdjflasdf阿里所困地方军阿里缩短1";
                int len = 0;
                String s = "";
                for (int i = 0; i < name.length(); i++) {
                    if (name.charAt(i) > 256) {
                        len += 2;
                        s += name.substring(i, i + 1);
                    } else {
                        len += 1;
                        s += name.substring(i, i + 1);
                    }
                    if (len >= (maxLen * 2 - 3)) {
                        s += "...";  //截取的
                        break;
                    }
                }
      

  3.   

    首先,Java中(since JDK1.1)字符串都是以Unicode(UTF16)的方式保存的,每一个字符(char)永远都是两个字节。而在不同编码中,同一个字符的字节数可能有不同,比如我们用的GB2312,GBK什么的,一个汉字2字节,英语数字1字节,而UTF8中,一个字符可能1个字节,也可能2,3字节,统计方式String.getBytes(编码格式).length
      

  4.   

    对呀,所以lz犯了一个错
    如果对byte进行操作,要考虑编码和char的问题
    但对于substring来说不用,因为这个方法是根据char来转换的,实际上是从第n个char到第m个char之间的全部拿出来创建新的String,而char不会将中文截断。