題目:編寫一個截取字符串的函數,輸入爲一個字符串和字節數,輸出爲按字節截取的字符串。 但是要保證漢字不被截半個,如“我ABC”4,應該截爲“我AB”,輸入“我ABC漢DEF”,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