java 按字节截取字符串

题目:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC4,应该截为“我AB”,输入“我ABCDEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。

 

分析:

众所周知使用GBK编码一个汉字占2个字节一个字字母占1个字节

但是在java中默认使用UTF-8编码所以一个汉字占3个字节,一个字母占1个字节

根据题意要求,一个汉字是按2个字节截取,所以我们需要将字符串更改为GBK编码

String str=new String("字符串".getByte("GBK"),"GBK");

 

防止汉字被截半个的情况,判断最后截取的字符串长度是否为偶数,

如果为偶数个,那么 就不存在汉字被截断半个的情况,

如果为奇数个,那么就可能存在汉字被截断半个的情况。

汉字编码,是采用两个字节,字节的第一个单元格为1,那么这两个字节都是负数,

所以只需要判断这个字节是否为负数,即可判断是否是中文。

if(leng%2==1&&b[leng-1]<0){

 

完整代码:

  public static void main(String[] args) throws UnsupportedEncodingException {
        int leng=5;    //截取字符串长度
        String str=new String("我ab实s".getBytes("GBK"),"gbk");  //默认字符串
        byte[] b=str.getBytes("gbk");
        if(leng%2==1&&b[leng-1]<0){
            leng--;
        }
        for (int i = leng; i <b.length ; i++) {
            b[i]=0;
        }
        System.out.println(new String(b,"GBK"));

    }

输出:我ab   

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章