你若用string的sub方法的话,是按实际的字符来切割的。
java根据字符编码和字节的值可以判断哪些自己组合起来成为一个字符,哪些是独立的一个字符。
如果你强制将字符串转成字节,再截取一部分转换成字符串,那要么乱码要么出错。

解决方案 »

  1.   

    这个问题又出现了= =
        public static String sub(String str, int num) {
            if (num <= 0)
                return "";
            StringBuffer sb = new StringBuffer();
            char[] ch = str.toCharArray();
            for (int count = 0, i = 0; i < ch.length; i++) {
                char c = ch[i];
                do {
                    count++;
                } while ((c >>= 8) != 0);
                if (count > num)
                    break;
                sb.append(ch[i]);
            }
            return sb.toString();
        }
      

  2.   

    因为java的char是16位的,所以转换为char数组再回去时不会出问题的,但是一个如果是中文或者其他一些奇奇怪怪的东西,一个char就是2个字符了
    转换为byte数组的话如果直接截取就可能会出现一个汉字截了一半导致乱码的情况出现
      

  3.   

    更正………………一个char就是2个字符了
    应该是2个字节了………………
      

  4.   

    好像还是有点问题,你这样写“ABC你好”按照题目是说他占7个字节,现在要输出6个字节,
    但是“好”占第6和7字节,不能把他输出,你这样好像还是会输出的?
      

  5.   

    不会啊,这个你测试一下就知道了到"ABC你"的时候count是5,然后读到"好",这个时候count变成7了,所以这个"好"就没有被append到那个StringBuffer里去,所以也就不会输出的