调用String的substring函数截取中文字符时,它把一个汉字当作一个字符来截取了,如下例:public class TestSubString{
public static void main(String[] args){
String str = "abc我要学英语!";
str = str.substring(0,5);
System.out.println(str);
}
}输出结果为"abc我要";
如果我想把一个汉字当成两个字符来截取,即,我想取得的结果为"abc我",我要怎么处理?
做法没有问题,因为我的数据库字段类型为varchar(5);
而用substring(0,5)截取的字符串"abc我要"在数据库中占的是7个字符
所以我想按字节来截取,即使会碰到乱码,我想应该有办法解决的吧?
varchar是可变长度
create table sstring (
name varchar(5));insert into sstring(name)
values('一二三四五');select * from sstring的结果是"一二三四五"
没有问题
insert into ssdInfoAgreementList(OperateTime,OperateUse,FeeTelNo,RecTelNum,RecTelNo,InfoCode,TailorMode,BeginTime,EndTime,TaskFrom,FeeType,Exp1) values('20060327103826','1','2323',1,'RecTelNo','最高温度:33度,最低温',2,'20060327103826','20060327103826',9,1,'')
这个语句有错误将‘最高温度:33度,最低温’换成'最高温度:33'它就正常了另infoCode字段是char(12)(真不知道数据库设计人员怎会还用char类型)
String str = "abc我要学英语!";
str = str.substring(0,4); 不就行了
str是变量,如果str="我要学英语",那str.substring(0,4)="我要学英",写到char(5)的字段中还是会报错
public static String substring(String s,int num){
int count=0;
StringBuffer res = new StringBuffer();
for(int i=0;i<s.length();i++){
int j = s.charAt(i);
if((j&0xff00>>>8)!=0)count++;
if(count<=num)res.append((char)j);
else break;
}
return res.toString() ;
}
可以考虑byte[]类型进行处理 不过代码操作就不如String方便 但是效率是一样的
public static void main(String[] args) {
String str = "abc我要学英语!";
byte[] substr= new byte[5];
System.arraycopy(str.getBytes(), 0, substr, 0, 5);
str = new String (substr);
System.out.println(str);
}
}