編寫一個(gè)截取字符串的函數(shù),輸入為一個(gè)字符串和字節(jié)數(shù),輸出為按字節(jié)截取的字符串,但要保證漢字不被截取半個(gè),如“我ABC”,4,應(yīng)該截取“我AB”,輸入“我ABC漢DEF”,6,應(yīng)該輸出“我ABC”,而不是“我ABC+漢的半個(gè)”。

首先要了解中文字符有多種編碼及各種編碼的特征。假設(shè)n為要截取的字節(jié)數(shù)。

public static void main(String[] args) throws Exception{
    String str ="我a愛中華abc我愛def';
    int num =trimGBK(str.getBytes("GBK"),6);
    System.out.println(str.substring(0,num));
 }
public static int trimGBK(byte[] buf,int n){
    int num = 0;
    boolean bChineseFirstHalf = false;
    for(int i=0;i<n;i++){
        if(buf[i]<0&& !bChineseFirstHalf){    //Byte的范圍是-127-128,一個(gè)漢子占兩個(gè)Byte且Byte[i]<0
          bChineseFirstHalf= true;  // 
        }else{
          num++;  //1    2   3 
          bChineseFirstHalf= false;
        }
    }
    return num;
}
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容