昨天注册的账号,今天上班时间上午无事挡下来StringUtils类的源码学习,在看到方法trim时,有种求知的冲动便有了下面的内容,鉴于本人菜鸟,请各位大神勿喷。

打开StringUtils类的源码定位到方法trim,相信绝大多数程序猿都使用过这个方法,因为它太过平常,所以大家可能没有留意其内部实现,一下是方法代码:

  public static String trim(String str) {

        return str == null ? null : str.trim();

    }

简单到不能再简单的一个定义,一句return,其实却是有奥秘在其中的,上面的代码我们很容易看懂,它使用了string类的trim方法,至于string的trim此处不贴源码有兴趣的可以自己挡下来看看

下来我将模拟string类实现trim(大神勿喷哦^_^)

首先我们肯定会想到trim本身就是做了去空格操作,有那么复杂吗?但是请各位仔细阅读String类的源码,你会发现它不仅仅是去空格这么简单而是使用value<=' ',为什么要这么做呢,下来我们分析下

在ascall码里面空格为十六进制20(\u0020),而trim方法使用的是<=这个值,那么很明显它不仅仅只是去除空格,ascall码表如下:

 

现在,我想很多人都明白了,接下来附上我模拟的Sring类trim方法:

public static String trim(String str) {

int start = 0, last = str.length()-1;

int end = last;

char[] value=str.toCharArray();

while ((start <= end) && (value[start] <= ' '))

start++;

while ((end >= start) && (value[end] <=' '))

end--;

if (start == 0 && end == last)

return str;

return new String(value,start, end - start+1);

}