“编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节数
但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。 ”   String subString(String str, int i) {
    String strReturn = "";
    if (str.equals("") || str == null || i == 0) {
      return "";
    }
    for (int j = 1; j <= str.length(); j++) {
      String temp = "";
      temp = str.substring(0, j);
      if (temp.getBytes().length >= i) {
        if (temp.substring(j - 1, j).getBytes().length == 1) {
          strReturn = temp;
        }
        else {
          strReturn = str.substring(0, j - 1);
        }        break;
      }    }    return strReturn;
  }这里干嘛要用一个for 循环,取子串直接用个temp变量不就行了吗,干嘛要用一个for循环,而且if (temp.substring(j - 1, j).getBytes().length == 1)怎么就能确保是汉字呢?难道取j-1到j的子串,如果是汉字,该子串的字节长度就不是1?那是什么?

解决方案 »

  1.   

    string.substring()是按char计算的,
    string.getbytes()是按byte计算的,搞清楚这个应该就能看懂了
    for循环是为了保证byte数不超过要求
    一个汉字的getbytes().length==2
      

  2.   

    class MySubString 
    {
    public static void main(String[] args) throws Exception
    {
    if(args.length<2)
    {
    System.out.println("java MySubString abc 2");
    return;
    }
    char[] buf=args[0].toCharArray();
    int num=Integer.parseInt(args[1]);
    String re="";
    for(int i=0,j=0;i<buf.length&&j<num;i++)
    {
    if(buf[i]>=0177)
    {
    if(j+2>num)break;
    re+=buf[i];
    j+=2;
    }
    else {re+=buf[i];j++;}
    }
    System.out.println("结果是:"+re);
    }
    }