我们在平时的项目开发中,为了去除字符串前后多余的空格,经常会使用java.lang.String#trim函数对字符串进行处理,可是你知道吗?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;
}
以上是java.lang.String#trim函数的实现源代码,我们可以看到,代码通过判断字符ASCII码值是否小于空格字符的ASCII码值来决定是否要去除该字符。依次对最前面连续的字符和最后面连续的字符进行判断,直到遇到需要保留的字符时才停止,则最终的st和len值即为返回结果的字符串索引起始位和长度。即假设存在字符串" small apple ",则经过trim函数处理后,返回"small apple",不管是前面的单个空格,还是末尾的连续空格都会被去除。
但是我们为什么说trim函数不仅仅会去除空格呢,原因就在于ASCII码值小于字符空格的字符不仅仅只有空格这个一个字符,以下是ASCII码表,我们可以看到ASCII码值小于32(空格的ASCII码值)的字符还有31个。如下图所示
如果这些字符单个或连续出现在字符串的起始位置和末尾位置,那么java.lang.String#trim函数都是可以去除这些字符的。所以trim函数是真的不仅仅只会去除字符串开始和末尾的空格的。喜欢作者文章的可以关注作者,不定期更新哦。
,