題目: 編寫一個函數,要求輸入一個字元串和位元組數,輸出該位元組個數的子字元串。
思路: 在Java程式設計語言中,String自帶的substring()方法可以按字元個數截取指定長度的字元串。而題目要求按照位元組進行截取,因為此時存在中文(占兩個位元組),是以不能直接使用substring()方法進行截取。主要的步驟是:
1. 判斷是否為中文;
2. 非中文則字元直接加一,中文則需再次細分:
(1). 位元組數沒有将中文截斷,字元數加一,且跳過該中文第二個位元組;
(2). 位元組數将中文截斷,字元數不變(隻會發生在最後一位)
代碼如下:
public String cutStringByByte(String string, int bytes) {
// 擷取字元串的編碼
private byte[] buffer = string.getBytes("GBK");
private int count = 0; // 字元個數
for (int i = 0; i < bytes; i++) {
if (buffer[i] < 0 && i + 1 < bytes) {
count++; // 中文且沒有被截斷,字元數加一
i++; // 跳過該中文
} else if (buffer[i] > 0) {
count++; // 非中文,字元數加一
}
}
return string.substring(0, count);
}