StringBuffer類的delete()方法和deleteCharAt()方法的區別

一枚正經的程式設計師發表於2019-07-31

引言

  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--,字元使用的長度減一


結語
  由於這是我第一篇部落格,可能會出現許多問題,歡迎大家在下方評論,提出寶貴的意見

相關文章