java 字符串截取的实例详解
java字符串截取的实例详解
前言:
在Java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符。
但对应的字节数不同,一个汉字占两个字节。
定义一个方法,按照指定的字节数来取子串。
如:对于“ab你好”,如果取三个字节,那么子串就是ab与“你”字的半个,那么半个就要舍弃。
如果取四个字节就是“ab你”,取五个字节还是“ab你”。
仅考虑GBK和utf-8编码
实例代码:
importjava.io.UnsupportedEncodingException; importorg.junit.Test; /** *@author胡龙华 *@version2017-4-4下午1:08:45 *@fileNameStringCut.java */ publicclassStringCut{ @Test publicvoidanalyze(){ Stringstr1="你好abc"; byte[]bs1=null; byte[]bs2=null; try{ bs1=str1.getBytes("GBK"); System.out.println("---GBK---"); for(byteb:bs1){ System.out.print(b+""); } System.out.println(); //-60-29-70-61979899 //发现规律,再gbk中一个中文汉字都是以两个字节小于0的数存储 bs2=str1.getBytes("utf-8"); System.out.println("---utf-8---"); for(byteb:bs2){ System.out.print(b+""); } //-28-67-96-27-91-67979899 //发现规律,在utf-8中一个中文汉字是以三个字节小于0的数存储 }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); } } /** *思路:从第len个往前数,连续2的倍数个负数则全部输出,单数个则去掉最后一个输出 *@paramstr *@paramlen *@return */ privatestaticStringStringCutByGBK(Stringstr,intlen){ byte[]bs=null; try{ intcount=0; bs=str.getBytes("GBK"); for(inti=len-1;i>=0;i--){ if(bs[i]<0){ count++; }else{ break; } //0123456789101112 }//-60-29-70-61-80-95979899-76-17-72-25 if(count%2==0){ Strings=newString(bs,0,len,"GBK"); System.out.println("截取"+len+"个字符:"+s); }else{ Strings=newString(bs,0,len-1,"GBK"); System.out.println("截取"+len+"个字符:"+s); } }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); } returnnull; } /** *思路:从第len个往前数,连续3的倍数个负数则全部输出,其他情况则去掉最后count%3个输出 *@paramstr *@paramlen *@return */ privatestaticStringStringCutByUTF8(Stringstr,intlen){ byte[]bs=null; try{ intcount=0; bs=str.getBytes("UTF-8"); for(inti=len-1;i>=0;i--){ if(bs[i]<0){ count++; }else{ break; } } //0123456789101112 //-60-29-70-61-80-95979899-76-17-72-25 if(count%3==0){ Strings=newString(bs,0,len,"UTF-8"); System.out.println("截取"+len+"个字符:"+s); }else{ Strings=newString(bs,0,len-count%3,"UTF-8"); System.out.println("截取"+len+"个字符:"+s); } }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); } returnnull; } @Test publicvoidTEST(){ Stringstr="你好啊abc达哥"; try{ System.out.println("---测试gbk---"); bytebs[]=str.getBytes("GBK"); for(inti=0;i<=bs.length;i++){ //System.out.print(bs[i]+""); StringCutByGBK(str,i); } System.out.println("---测试UTF-8---"); bytebs2[]=str.getBytes("utf-8"); for(inti=0;i<=bs2.length;i++){ //System.out.print(bs[i]+""); StringCutByUTF8(str,i); } }catch(UnsupportedEncodingExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } }
以上就是java字符串截取的实例,如有疑问请留言或者到本站社区交流讨论,本站关于java的文章还有很多,希望大家多多搜索参阅,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!