Java字符串String的trim()方法源碼解析

平常判斷一個字符串是不是一個空串,通常都會先調用String類的trim()方法,再判斷該字符串的長度是不是0,或者調用String的isEmpty方法判斷是不是空串(和判斷長度等價)。那麼,其實trim()方法就是將一個字符串開頭連續的空格和結尾連續的空格消除的方法。下面就通過源碼瞭解一下這個方法的邏輯是如何實現的。

首先,貼上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;
    }

源碼中,value就是字符串的字符數組,如,字符串“test”是用一個final修飾的char[]數組保存,value=['t','e','s','t']。

知道了value的值,那麼源碼就很容易看懂了。

首先是把字符串長度賦值給len這個變量,那麼len=4;

賦值st變量值爲0,st=0;

字符數組val=value

從該字符數組的0下標開始遍歷,如果這個下標的字符是空格或者小於空格(ascll表裏面,在空格前面的全是各種符號,換行符這些),那麼st的值就加一,可以簡單理解爲st的值就是字符串頭部空格的數量。當遇到第一個不是空格的字符時,跳出循環,那麼st的值就是字符串第一個不是空格的字符的下標。

之後,如果空格的數量小於字符串的長度(如果等於字符串長度,跳出循環,執行最後的substring方法,substring()源碼裏面的處理是直接返回空串。),並且字符串末尾的字符是空格的話,那麼len減一,簡單理解,len就是這個字符串再移出末尾連續的空格之後的長度;從尾部開始,當遇到第一個不是空格的字符時,跳出循環。

最後執行substring方法,將去掉了開頭連續的空格和結尾連續的空格的字符串返回。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章