1. 程式人生 > >按位元組擷取帶有中文字元的字串

按位元組擷取帶有中文字元的字串

題目: 編寫一個函式,要求輸入一個字串和位元組數,輸出該位元組個數的子字串。

思路: 在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);
}