调用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我",我要怎么处理?

解决方案 »

  1.   

    to:wizardblue(不死鱼) 
    做法没有问题,因为我的数据库字段类型为varchar(5);
    而用substring(0,5)截取的字符串"abc我要"在数据库中占的是7个字符
    所以我想按字节来截取,即使会碰到乱码,我想应该有办法解决的吧?
      

  2.   

    varchar(5)又不是说只能是5个字符
    varchar是可变长度
      

  3.   

    还有我刚才去mysql下面试了
    create table sstring (
      name varchar(5));insert into sstring(name)
    values('一二三四五');select * from sstring的结果是"一二三四五"
    没有问题
      

  4.   

    我用的是sqlserver:
    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类型)
      

  5.   

    感觉楼主概念有点混乱,你个汉字就是一个字符 ,字母在这里也是一个字符 
    String str = "abc我要学英语!";
    str = str.substring(0,4);  不就行了
      

  6.   

    to:kingofworl(良辰美景虚度)
    str是变量,如果str="我要学英语",那str.substring(0,4)="我要学英",写到char(5)的字段中还是会报错
      

  7.   

    这样就有点离谱了,那只好硬截了
    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() ;
    }
      

  8.   

    java中的String是unicode类型的的 汉字占用一个字节 和c中的char[]是不一样的
    可以考虑byte[]类型进行处理 不过代码操作就不如String方便 但是效率是一样的
      

  9.   

    按照字节来取public class MainAssist {
        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);
        }
    }
      

  10.   

    在JAVA里采用的是Unicode 编码,中文 英文字符都是占两个字节,所以中英文字符都算一个