最近在調試一段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以後就消失的緣由了。函數