4 回答

TA貢獻1804條經驗 獲得超3個贊
public String trim() {
int len = count; // 有效字符(不是空格)結束位置
int st = 0; // 有效字符(不是空格)起始位置
int off = offset; // 字符數組起始位置,應該是0
char[] val = value; // 字符數組
while ((st < len) && (val[off + st] <= ' ')) { // 從起始位置開始遍歷,獲取起始連續空格的最后空格位置
st++; // st值發生變化,說明起始有空格,st就是起始需要截取的位置
}
while ((st < len) && (val[off + len - 1] <= ' ')) { // 從末尾位置開始遍歷,獲取末尾連續空格的第一個空格位置
len--; // len值發生變化,說明末尾有空格,len是末尾需要截取的位置
}
return ((st > 0) || (len < count)) ? substring(st, len) : this; // 判斷是否有空格需要截取,有截取,沒有返回原String
}

TA貢獻1946條經驗 獲得超3個贊
public String trim() {
int len = count; //你可以理解為這個字符串變成char數組以后的長度
int st = 0;
int off = offset; /* avoid getfield opcode */ //當做是0
char[] val = value; /* avoid getfield opcode */ //由這個字符串變成的字符數組
while ((st < len) && (val[off + st] <= ' ')) { //var[off+st]其實是拿到這個數組的首字符,由首字符和‘ ’的ascii碼比較,如果<=就繼續下一個字符比較,如果>了就停止比較;最后st會拿到第一個不是 ‘ ‘字符的下標
st++;
}
//下面這個邏輯和上面一樣,其實拿到就是一個最后一個字符不是’ ‘的下標。
while ((st < len) && (val[off + len - 1] <= ' ')) {
len--;
}
//最后返回的是截取這個字符串中下標從st開始到len結束的一個字符串。
return ((st > 0) || (len < count)) ? substring(st, len) : this;
}
- 4 回答
- 0 關注
- 935 瀏覽
添加回答
舉報