int k=11;//要取得的长度
String temp="abc大家好大家好大家好大较好";
System.out.println("原始字符是:"+temp);
byte[] b=temp.getBytes();
//System.out.println("byte字符是:"+b);
String substr=new String (b,0,k);//
System.out.println("字符长度:"+temp.length());
System.out.println("byte长度:"+b.length);
System.out.println("subStr是:"+substr);
System.out.println("substr长度是:"+substr.length());
k=11的时候
原始字符是:abc大家好大家好大家好大较好
字符长度:15
byte长度:27
subStr是:abc大家好大
substr长度是:7
k=10的时候
原始字符是:abc大家好大家好大家好大较好
字符长度:15
byte长度:27
subStr是:abc大家好??
substr长度是:7
我怎么防止取到后面的半个字符?

解决方案 »

  1.   

    你说的是正好处于一个双个字节之间,怎么截取吧,没遇到过,给你个比较笨的思路!如果长度是字符长度:15,byte长度〉字符长度,取整个字符的第15个字符,看他的byte长度是1还是2,如果是1,直接取前15个,如果是2,取前12个!不知道我理解的对不!
      

  2.   

    if b[k-1] < 0
      String substr=new String (b,0,k-1);
      

  3.   

    贴个完整点的
    for (int i=0;i<k;i++){
       if (b[i<0])
         num_zhcn++;
    }if (num_zhcn%2!=0)
      k--;
    String substr = new String(b,0,k,"GBK");