public static String subString(String str, int star, int end) {
    if (str == null) {
      return "";
    }
    str = str.trim();
    StringBuffer r = new StringBuffer();
    int l = str.length();
    float count = 0;
    for (int i = star; i < l; ++i) {
      char c = str.charAt(i);
      if (c > 255 || c < 0) {
        ++count;
        r.append(c);
      }
      else {
        count += 0.5;
        r.append(c);
      }
      if (count >= end - star) {
        break;
      }
    }
    return r.toString();
  }

解决方案 »

  1.   

    start 开始截取的位置,end 是结束的位置。
      

  2.   

    public String getString(String s,int len){
         int length=0,index=0;
         for(int i=0;i<s.length();i++){
          if(s.charAt(i)>128){
          length+=2;
          }
          else{
          length+=1;
          }
          index=i;
          if(length>=len)break;
         }
         if(length>len)index--;
         return s.substring(0,index+1);
      }
      

  3.   

    楼主对java中的String理解有误,String中不管是英文字符还是汉字都使用UNICODE编码占两个字节,
    不会出现截取半个汉字的现象,如:
    "我abc".substring(0,4)=="我abc"
    "我ABC汉DEF".substring(0,5)=="我ABC汉"
      

  4.   

    JAVA用unicode全部字符都是16位的 不会出现截断一半的问题
      

  5.   

    public static String changeValue(String inValue,int valueLong){
    String returnValue = "";
    int n = 0;
    for(int i = 0;i<inValue.length();i++){
    char a = inValue.charAt(i);
    byte[] b =String.valueOf(a).getBytes();
    if (b.length==2){
    n++;
    }
    returnValue += a;
    if (n>=valueLong) break;
    n++;
    }
    return returnValue;
    }