JAVA的String类的trim陷阱

最近在调试一段Java代码的时候,发生个奇怪的现象,在一个字符串的后面跟了一个不可见字符(acsii编码为0x13),对该字符串进行trim操做 以后,发现该不可见字符消失了,在调试的过程当中,没有认为会是由于trim形成的,可是在阅读了java的String类代码以后,才终于明白trim方 法究竟是怎么回事了。html

public String trim() {
    int len = count;
    int st = 0;
    int off = offset;      /* avoid getfield opcode */Spring security防用户重复登陆
    char[] val = value;    /* avoid getfield opcode */

    while ((st < len) && (val[off + st] <= ' ')) {
        st++;
    }
    while ((st < len) && (val[off + len - 1] <= ' ')) {
        len--;
    }
    return ((st > 0) || (len < count)) ? substring(st, len) : this;
}java

 注意其中的while判断部分,本身原来一直觉得trim只是比较字符是否等于空格,但实际上trim函数会把全部包含空格在内的以及空格以前的全部不可见字符所有滤掉,由于空格的ascii码是0x20,这也就是为何0x13字符通过trim以后就消失的缘由了。函数

相关文章
相关标签/搜索