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   

 

 

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