String內部是一個private final char value[];
也就意味着每次調用的各種處理方法,返回的字符串都是一個新的,性能上,顯然....
所以,對於可變字符序列的需求是很明確的
屬性簡介
屬性獲取
既然是內部維護了字節數組
必然這個數組本身屬性,長度 ,使用個數的獲取,以及數組的擴大也有相對應的方法可以使用
添加方法
就像我們剛才說的那樣,添加元素,分為尾部追加元素和中間插入元素
添加元素的方法也分為了兩大陣營
| AbstractStringBuilder append(Object obj) | AbstractStringBuilder insert(int offset, Object obj) |
| AbstractStringBuilder append(boolean b) | AbstractStringBuilder insert(int offset, boolean b) |
| AbstractStringBuilder append(char c) |
AbstractStringBuilder insert(int offset, char c) |
| AbstractStringBuilder append(int i) | AbstractStringBuilder insert(int offset, int i) |
| AbstractStringBuilder append(long l) | AbstractStringBuilder insert(int offset, long l) |
| AbstractStringBuilder append(float f) | AbstractStringBuilder insert(int offset, float f) |
| AbstractStringBuilder append(double d) | AbstractStringBuilder insert(int offset, double d) |
| AbstractStringBuilder append(CharSequence s) | AbstractStringBuilder insert(int dstOffset, CharSequence s) |
| AbstractStringBuilder append(CharSequence s, int start, int end) |
AbstractStringBuilder insert(int dstOffset, CharSequence s,int start, int end)
|
| AbstractStringBuilder append(char[] str) | AbstractStringBuilder insert(int offset, char[] str) |
| AbstractStringBuilder append(char str[], int offset, int len) |
AbstractStringBuilder insert(int index, char[] str, int offset, int len)
|
| AbstractStringBuilder append(String str) | AbstractStringBuilder insert(int offset, String str) |
| AbstractStringBuilder append(StringBuffer sb) | |
| AbstractStringBuilder appendCodePoint(int codePoint) |
| 從上表可以看得出來,給各種數據類型都提供了append和insert方法 |
| 對於insert 是插入,既然是插入,那么就需要指定位置 所以與append對應的方法的方法簽名上,都多了一個索引 |
| 所有的方法的返回類型都是AbstractStringBuilder 其實都是 return this; 因為他是可變的,所以變化直接體現在了this中,所以返回this就好了 |
| appendCodePoint(int codePoint) 與 append(char c) 可以說是一樣的 但是對於輔助平面顯然又不一樣,char不支持輔助平面 |
獲取方法
獲取代碼點
|
代碼點相關的五個方法
charAt(int) / codePointAt(int) / codePointBefore(int) / codePointCount(int, int) / offsetByCodePoints(int, int)
他們與String中的是一模一樣的,代碼也是一樣的(就有個變量名變動)
|
復制
|
getChars(int, int, char[], int)
將字符從此序列復制到目標字符數組 dst 與String中的方法也幾乎一致
|
索引下標
|
int indexOf(String str)
int indexOf(String str, int fromIndex)
|
第一次出現的指定子字符串在該字符串中的索引 可以指定索引 指定索引就從索引處開始查找匹配 滿足的條件為startsWith true (並且在范圍內 如果有設置) |
|
int lastIndexOf(String str)
int lastIndexOf(String str, int fromIndex)
|
返回最右邊出現的指定子字符串在此字符串中的索引 也就是最后一個 可以指定索引 指定索引就從索引處 反向匹配 滿足的條件也是startsWith true (並且在范圍內 如果有設置) |
獲取子串
更新方法
| 更新方法比較少,因為是數組 數組的訪問按照下標進行設置就好了 還提供了替換的功能,也算是更新操作 |
![]() |
| AbstractStringBuilder replace(int start, int end, String str) 使用str替換對象中從start 開始到end結束的這一段 |
刪除方法
| AbstractStringBuilder delete(int start, int end) | 刪除指定范圍的char![]() |
| AbstractStringBuilder deleteCharAt(int index) | 刪除某個位置的char![]() |
其他方法
| reverse() 按照字符進行翻轉 |
| 將此字符序列用其反轉形式取代 就是翻轉每一個char,注意可不是翻轉比特位,也不是翻轉字節,反轉的是代碼單元 不過對於輔助平面的字符的代碼點,他們會按照字符進行翻轉,也就是高代理低代理順序不會改變 |
| 執行操作前未成對的低代理項和高代理項將成為代理項對 例如,反轉 "\uDC00\uD800" 將生成有效的代理項對 "\uD800\uDC00" |
總結
如同我們上面說的,AbstractStringBuilder就是 可變 字符序列的一個綱領
它規定了可變字符序列應該有的行為
比如 添加字符/刪除字符/更新字符/獲取字符
因為可變,所以對於可變的支持,自然是必不可少的
另外,他作為String在很多方面的一個替代,必然也是提供了String的一些功能方法
否則與String API 變化巨大 也是毫無意義
因為畢竟本身就是為了描述字符序列
所以對於AbstractStringBuilder 只需要徹底理解了他作為 可變字符序列的標准接口即可













