charAt()返回這個位置上的code point 注意unicode碼的code point 可以由不同編碼集的多個code uints 構(gòu)成,使用setCharAt()改變StringBuilder上對應(yīng)位置的code point苏章。String在內(nèi)存中都是UNICODE code point 的表示形式墓卦,只有當(dāng)需要保存或者傳輸時才會變換成不同的編碼集。所以內(nèi)存中String里的code point 都是四個字節(jié)奶赠。
PS:char 類型在java中表示為兩個字節(jié)
關(guān)于java的字符串編碼送朱,java的字符串編碼方式是UTF-16(心疼,當(dāng)時也沒有預(yù)見到世界上的文字UTF-16沒有辦法完全表示吧)钞护,說道UTF-16,為了表示超出范圍的字符铃肯,UTF-16使用了高低代理對(Surrogate Pairs)來進(jìn)行折中患亿。
length()方法返回的是UTF-16下String的code point 數(shù)。
class Solution {
public String reverseString(String s) {
StringBuilder sb = new StringBuilder(s);
int lo = 0;
int hi =sb.length()-1;
while(lo<=hi)
{
char ch = sb.charAt(lo);
sb.setCharAt(lo,sb.charAt(hi));
sb.setCharAt(hi,ch);
hi--;
lo++;
}
return sb.toString();
}
}