題目:從含有中文字符的長度爲N的字符串中截取M個字符,中文字符不能被分紅兩半。如從"我a愛中華abc我愛中國def,我ABC漢" 中取4個字符結果應該爲"我a",而不是"我a愛"。java
TIP:blog
* 將字符轉碼爲GBK[一箇中文包含兩個字符且均小於0]
* 標識符標記前一個字節小於0做爲輔助判斷依據
* 當前字節小於0且前一次小於0【標識符判斷】則爲一箇中文, 不然改變標識符的狀態字符串
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) { bChineseFirstHalf = true; } else { num++; bChineseFirstHalf = false; } } return num; }