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方法,将去掉了开头连续的空格和结尾连续的空格的字符串返回。

你可能感兴趣的:(Java探讨)