引言
StringBuffer類的delete()方法和deleteCharAt()方法都是用來刪除StringBuffer字串中的字元
區別
1.對於delete(int start,int end)這個方法一共有兩個引數是int型別的,代表從索引下標start刪除字元到索引下標end字元,但是不包括end
2.對於StringBuffer中的deleteCharAt(int index)方法:只有一個引數,使用時刪除索引為index的字元
程式碼及結果如下圖所示
package StringTest;
/**
* @auther cela
* @date 2019/7/31 9:58
*/
public class StringBufferTest {
public static void main(String[] args){
StringBuffer sb = new StringBuffer("012345");
// 刪除索引1-2的字元,但是不包括2
StringBuffer delete = sb.delete(1, 2);
System.out.println(delete);
StringBuffer stringBuffer = new StringBuffer("012345");
// 刪除索引為4的字元
StringBuffer deleteCharAt = sb.deleteCharAt(4);
System.out.println(deleteCharAt);
}
}
結果
原始碼分析
1.delete(int start,int end)原始碼分析
StringBuffer類中delete(int start, int end)這個方法是呼叫其父類AbstractStringBuilder中的delete(int start, int end)方法,程式碼如下
首先判斷start是否小於0,小於0丟擲異常。再判斷end是否大於StringBuffer中字元使用了的長度,是那麼end就等於count。再判斷end是否大於start,是丟擲異常。len是StringBuffer中刪除字元的長度
最後呼叫System.arraycopy(value, start+len, value, start, count-end)這個方法複製字元陣列,value代表原陣列,srcPos代表複製的起始位置,value代表目標陣列,start代表目標陣列起始位置,
length代表複製的長度
2.deleteCharAt(int index)原始碼分析
StringBuffer類中delete(int start, int end)這個方法是呼叫其父類AbstractStringBuilder中的deleteCharAt(int index)方法,程式碼如下
首先判斷index是否小於0或者大於count,條件成立丟擲異常
然後使用System.arraycopy(value, index+1, value, index, count-index-1);這個方法複製字元陣列
最後count--,字元使用的長度減一
結語
由於這是我第一篇部落格,可能會出現許多問題,歡迎大家在下方評論,提出寶貴的意見