import java.io.*;
import java.util.*;public class B {
public static void main(String[] args) {

String s= new String();
s="CIF_CNAME 中文名称 VARCHAR(30)  如果中文名";
System.out.println(s);

int i=s.lastIndexOf("如");
System.out.println(s.length());
System.out.println(i);

System.out.println(s.substring(0,i));

 
}   结果是:
   CIF_CNAME 中文名? VARCHAR(30)  如果中文名
34
29
CIF_CNAME 中文名? VARCHAR(30) 
     这个字符串的长度是34 但是“如”的位置不是29!!!!而且s.substring(0,i)打印出来的应该是“如”字前面的东西,怎么都打印出来了??????
}

解决方案 »

  1.   


    结果是:
       CIF_CNAME 中文名? VARCHAR(30)  如果中文名  //System.out.println(s);运行的结果
    34  
    29  //索引号是0~33,最后一个“名”是33,如正好是29,没错。
    CIF_CNAME 中文名? VARCHAR(30) //System.out.println(s.substring(0,i));运行的结果,是“如”之前的的字串,并没有全部打印出来啊。
      

  2.   

    s.length  == 34  ???
      

  3.   

    CIF_CNAME中文名称VARCHAR(30) 如果中文名
    30
    25
    CIF_CNAME中文名称VARCHAR(30) 
    以上是我的测试结果
    环境win2k3,JDK1.5, JBuilder2006
      

  4.   

    在楼主的程序中加了个byte数组,在eclipse3.1下运行了,结果如下:
    public class B {

    public static void main(String[] args) {

    String s= new String();
    s="CIF_CNAME中文名称VARCHAR(30) 如果中文名";

    byte[] bt = s.getBytes();
    System.out.println("length="+bt.length);

    System.out.println("s="+s);
    System.out.println("bt="+new String(bt)+"length="+new String(bt).length());


    int i=s.lastIndexOf("如");
    System.out.println(s.length());
    System.out.println(i);

    System.out.println(s.substring(0,i));

    }
    }length=39
    s=CIF_CNAME中文名称VARCHAR(30) 如果中文名
    bt=CIF_CNAME中文名称VARCHAR(30) 如果中文名length=30
    30
    25
    CIF_CNAME中文名称VARCHAR(30)实际长度为39字节,但是在计算String长度时,把一个中文默认为一个字符,这样字符串长度就为30字符,substring的结果没有错