天天看點

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

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

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