输入一个字符串,比如"中ABC大EFG" 再输一个数字代表了字符串的字节数,比如4,控制台输出:中AB  输入6,控制台输出:中ABC大 而不是:中ABC+大的半个,程序怎么写?

解决方案 »

  1.   

    http://www.blogjava.net/nokiaguy/archive/2008/09/07/227485.html
      

  2.   

    中文的ascii码是负数,你可以给个判断,如果是负数的话,执行...
      

  3.   


    public static void main(String[] args) throws Exception {
    System.out.println(subString("中ABC大EFG", 1));
    } static String subString(String src, int length) throws Exception {
    byte[] b = src.getBytes("gbk");
    boolean isChinese = false;
    if (length <= b.length) {
    if (b[length-1] < 0) {//当所截取长度的最后一个字节是汉子时才需要进行汉子解析否则的话就是正常的截取就行了
    for (int i = 0; i < length; i++) {
    if (b[i] < 0 && !isChinese) {// 如果是汉子往后多吞一个字节
    i++;
    length++;
    } else {
    isChinese = true;
    }
    }
    }
    }
    return new String(b, 0, length, "gbk");
    }
      

  4.   

    上面的代码测试了下有问题请无视之
    public static void main(String[] args) throws Exception {
    System.out.println(subString("中ABC大EFG", 5));
    } static String subString(String src, int length) throws Exception {
    byte[] b = src.getBytes("gbk");
    boolean halfChinese = false;//是否是半个汉子
    if (length >= b.length) {
    length=b.length;
    }
    if (b[length - 1] < 0) {// 当所截取长度的最后一个字节是汉子时才需要进行汉子解析否则的话就是正常的截取就行了
    for (int i = 0; i < length; i++) {
    if (b[i] < 0 && !halfChinese) {// 如果是汉子往后多吞一个字节(字节数<0并且不是半个汉子)
    halfChinese = true;
    } else {//这里的情况就有是正数的或者虽然<0但前面已经有半个汉子了这里就标记为不是半个汉子
    halfChinese = false;
    }
    }
    if (halfChinese)
    length++;
    }
    return new String(b, 0, length, "gbk");
    }