JAVA类里面 trim() 方法大家都比较熟悉,就是用来清除掉字符串首尾的空白字符。但在一次程序运行崩溃后,查找具体原因时,发现是由字符串末尾的一个回车符号 "\r" 所导致的。于是有机会仔细读了下该方法的 java 文档说明。其中一段内容如下:
Returns a string whose value is this string, with all leading and trailing space removed, where space is defined as any character whose codepoint is less than or equal to 'U+0020' (the space character).
这段代码的大意是,去除首尾的空白字符,代表空白字符的 codepoint 需要小于或者等于 'U+0020','U+0020' 转为二进制就是 0000, 0010, 对应的十进制是 32. ASCII 字符代码表如下:
转换到下面一张比较直观的表格:
所以经过上面的梳理后,对 trim() 方法能够去除的“空白字符”有了更加直观的理解,今后也能够更合理地运用该方法了。上面的提到的 BUG,在我手动添加 trim() 方法剔除掉末尾的 "/r" 这个空白字符后也就解决掉了。
最后,再稍微延伸一下,在 Java 11 的发行版中,添加了新的 strip() 方法来删除字符串中的前导和末尾空格。既然已经有了一个 trim 方法,为什么还要新增一个 strip 呢?这其实是是因为 trim 方法只能针对 ASCII 值小于等于 32 的字符进行移除,但是根据 Unicode 标准,除了ASCII中的字符以外,还是有很多其他的空白字符的,具体细节可以参考:从String中移除空白字符的多种方式