切換語言為:簡體

詳細解讀 Java 字串 String 工具類 trim 實現思路

  • 爱糖宝
  • 2024-06-18
  • 2066
  • 0
  • 0

Java 中去除 String 中的空白字元的工具方法是 trim() ,原始碼如下:

public String trim() {
    int len = value.length;
    int st = 0;
    char[] val = value;    /* avoid getfield opcode */

    while ((st < len) && (val[st] <= ' ')) {
        st++;
    }
    while ((st < len) && (val[len - 1] <= ' ')) {
        len--;
    }
    return ((st > 0) || (len < value.length)) ? substring(st, len) : this;
}

這段程式碼是Java中String類的trim()方法的實現,其作用是從字串的兩端移除空白字元,包括空格、製表符、換頁符等。下面是逐行的詳細解讀:

public String trim() {

定義了一個公共方法trim(),返回值型別為String。此方法不接收任何引數。

int len = value.length;

宣告並初始化一個整型變數len,其值為當前字串的長度。value是String類的一個私有final欄位,它儲存字串的字元陣列。

int st = 0;

宣告並初始化一個整型變數st(起始索引),初始值設為0。這個變數將用來記錄字串開始不為空白字元的位置。

char[] val = value;    /* avoid getfield opcode */

建立一個指向value的引用val。註釋說明這樣做是爲了避免在迴圈體內直接訪問value欄位時產生額外的欄位訪問(getfield)操作碼,從而略微提高執行效率。

接下來的兩個while迴圈分別用於從字串的開頭和結尾移除空白字元。

while ((st < len) && (val[st] <= ' ')) {
    st++;
}

這個迴圈從字串的起始位置開始遍歷,只要當前索引st小於字串長度len且當前位置的字元是一個空白字元(ASCII值小於或等於空格字元的ASCII值),就將st加1,直到遇到非空白字元或到達字串末尾。

這裏重點提醒:

  • <= ' ':這裏的 ' ' 是一個空格字元的表示,其ASCII值為32。比較操作<= ' ' 用來檢測當前檢查的字元(即字串末尾的那個字元)是否是一個空白字元,包括但不限於空格、製表符等。在ASCII碼中,空格之後的字元(ASCII值大於32)被認為是非空白字元。因此,如果當前字元的ASCII值小於或等於32,這個條件就會成立,意味著字元是一個空白字元。

while ((st < len) && (val[len - 1] <= ' ')) {
    len--;
}

這個迴圈從字串的末尾向前遍歷,只要當前字串的有效長度len大於起始索引st且末尾位置的字元是一個空白字元,就將len減1,直到遇到非空白字元或st等於len。

return ((st > 0) || (len < value.length)) ? substring(st, len) : this;

最後,根據st和len的值判斷是否進行了修剪操作。如果st大於0,說明移除了前導空白;如果len小於原始長度,說明移除了尾隨空白。任一條件滿足,則使用substring(st, len)方法返回一個新的、兩端無空白字元的字串。如果兩端都沒有空白字元被移除(即st仍為0且len仍等於原長度),則直接返回當前物件(this),因為在這種情況下字串不需要修改。

總結起來,trim()方法透過識別並移除字串兩端的空白字元,提供了字串清理的功能,常用於文字處理前的預處理階段。


0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.