4 回答

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

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