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)打印出来的应该是“如”字前面的东西,怎么都打印出来了??????
}
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)打印出来的应该是“如”字前面的东西,怎么都打印出来了??????
}
结果是:
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));运行的结果,是“如”之前的的字串,并没有全部打印出来啊。
30
25
CIF_CNAME中文名称VARCHAR(30)
以上是我的测试结果
环境win2k3,JDK1.5, JBuilder2006
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的结果没有错