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()方法透過識別並移除字串兩端的空白字元,提供了字串清理的功能,常用於文字處理前的預處理階段。