写个简单的试试  public static String getStr(String src, int len) {
    if (src == null)       return null;
    if (src.getBytes().length <= len)  return src;    byte[] s = src.getBytes();
    int flag = 0;
    for(int i=0;i<len;++i){
     if(s[i] < 0) flag++; 
    }
    if(flag%2!=0) len--;        byte[] d = new byte[len];
    System.arraycopy(s, 0, d, 0, len);
    return new String(d);
  }

解决方案 »

  1.   

    kingfish(八百里秦川@龙城异客) 的方法可行!
      

  2.   

    看看这个吧,你们是不是同一个啊?
    http://community.csdn.net/Expert/topic/3816/3816238.xml?temp=.4273188
      

  3.   

    System.out.println((int)"我".charAt(0));
         System.out.println((int)"爱".charAt(0));
          System.out.println((int)"做".charAt(0));
           System.out.println((int)"很".charAt(0));
            System.out.println((int)"徐".charAt(0));
    25105
    29233
    20570
    24456
    24464那是不是判断下首位是不是2呢,若是2,那再判断是不是数字2,若不是,就认为是中文,那就不能截断,呵呵乱想
      

  4.   

    没测试,可能有错,基本思路就那样了。
    byte[] getBytes(int len, String s) {
     int pos = 0;
     int step = 0;
     for (int i=0; i<s.length(); ++i) {
         char ch = s.charAt(i);
         if (ch > 255) {
          step = 2;
         } else {
            step =1;
         }
         if (pos+step > len) {
           break;
         }
     }
     byte[] arr = new byte[len];
     byte[] origin = s.getBytes();
     for (int i =0; i< pos; ++i) {
         arr[i] = origin[i];
     }
    return arr;
    }
      

  5.   

    汉字是双字节编码,它为了能够与英文字符分开,每个字节的最高位一定为1。如果是汉字,那么这个字节就是小于0的。这个函数就是通过这一原理实现的。所以要通过getBytes()转化为byte型,再比较与零的大小。
    getBytes()是把一个字符串转成一个byte数组,因为计算机的数据都是基于字符的,也就是说一个字符串实际上就是一个字符流,因此可以转为字符数组。汉字是双字节编码,英文是单字节编码。构成汉字的第一个字节是一个负值,第二个是正值。
    而构成英文字母的字节总是正值。至于为什么这么定义,我想你还是看一下unicode码的规范吧。
      

  6.   

    所以一楼             kingfish(八百里秦川@龙城异客)     的方法很好!