String str = "这是测试ABCD测试" ;
我现想做的就是,对str进行截取,按给出的字节来取得,假如给出的是3,取出来的字符应该是"这",而不是"这"加上"是"的半个字符,谢谢!

解决方案 »

  1.   

    str.substring(起始位置,结束位置)例如str.substring(3,4),打印出"试"
      

  2.   

    假如给出的是3,取出来的字符应该是"这"?????
    楼主是不是看错了,如果str.substring(3),取出来的怎么可能是“这”,取出来的应该是“试ABCD测试”才对
      

  3.   

    啊? 哦,如下
    str.substring(0,(i%2==0)?i:(i-1));不过很奇怪,一个汉字应该就是string中的1位,
    也就是说str.length ==10比如楼主说的String str = "这是测试ABCD测试";
    str.substring(0,1)就应该出来“这”
    str.substring(0,2)就应该出来“这是”
      

  4.   

    同志们,是按byte来取,直接用substring的时候,一个汉字可是两个byte的
      

  5.   

    String str1 = "这是测试用的字符串串通一气" ;
    String str2 = "这是ABCDEFGHIFLKLG测试用的" ;
    String str3 = "ASDFDDFFFFFFFFFFFFFFFFFFDF" ;
    比如我现在有一个显示框,里面只可以显示5个字符,当str中全为双字节的字符时,截取str1的结果为:这是测试用;当str中全为str3所示时,截取str3的结果为:ASDFDDFFFF;当str中字符为str2中所示时,截取str2的结果为:这是ABCDEF;-->这样如何实现???在线等,急急急!谢谢!
      

  6.   

    public mysubstring(String str1,int N)//str1 是需截取的字符串,N是截多少字节
    {
    char[] temp;
    char ch;
    int i,n=0;
    for ( i = 0; i < str1.length(); i++) 
      {
         ch = str1.charAt(i);
         temp = new char[] {ch};
         byte[] uniCode = new String(temp).getBytes();
     if (uniCode[0] < 128 && uniCode[0] > 0)//判断是否为汉字
     n++;
     else n+=2;//汉字取两字节
     if(n==N)  break;
     else if(n>N) {i--;break;}//避免出现半个汉字
      }
       return=str1.substring(0,i+1);
       
    }
      

  7.   

    改一下
    函数的类型是
    public String mysubstring(String str1,int N)
    漏打String了
      

  8.   

    另外,我开始没有理解楼主的意思,我用的是字节,楼主要求字符.所以在调有此函数的时候,N*2.
    或者在函数第一行加上
    N=N*2;
      

  9.   

    String str = "这是测试ABCD测试" ;
    try {
      System.out.println(str.substring(3,4));
    } catch (Exception e) {
    e.printStackTrace();
    }===========
    test 上面的代码!
      

  10.   

    不明白,真有你们说的那么麻烦吗?我的环境是JDK1.4.2+win XP sp2
      

  11.   

    blackhost, 你理解错了楼主的意思!