一般理解trim()是去掉字符串两遍的空格,其实不仅仅是去空格。
实际是去除String类前后的whitespace,“空白字符”,空格只是其中一种。
上源码,看怎么回事:
/**
* This method may be used to trim whitespace (as defined above) from
* the beginning and end of a string.
*
* @return A string whose value is this string, with any leading and trailing white
* space removed, or this string if it has no leading or
* trailing white space.
*/
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;
}
while ((st < len) && (val[st] <= ' '))这一行是判断前面的每个char的值与空格的字符的ASCII编码值进行比较,空格的十进制ASCII编码值为32,及小于这个值得字符都会被截掉,参考ASCII编码表,该范围内常见的几个字符有:空字符、退格、水平制表符、换行键、回车键等。
判断后面的空格含义同理。
附ASCll编码表: