}
这个方法是插入字符串的方法,有四个参数,第一个参数是要插入在哪个下标之后,第二个参数是要插入的字符数组,第三个是在参数数组的开始拷贝下标,第四个参数是要插入的长度。
首先判断下表是否越界,否则抛出异常。
然后给value扩容,扩大len个,也就是第四个参数那么大。
然后进行数组拷贝,先将value的index下标之后的元素拷贝到index和len之和下标处,拷贝count-index个元素,就是将原value数组的index之后的元素拷贝。
然后将参数数组从开始下标开始拷贝到value数组的index下标之后,拷贝len个。然后count自增len个。
最后返回本对象。
public AbstractStringBuilder insert(int offset, Object obj) {
return insert(offset, String.valueOf(obj));
}
public AbstractStringBuilder insert(int offset, String str) {
if ((offset < 0) || (offset > length()))
throw new StringIndexOutOfBoundsException(offset);
if (str == null)
str = "null";
int len = str.length();
ensureCapacityInternal(count + len);
System.arraycopy(value, offset, value, offset + len, count - offset);
str.getChars(value, offset);
count += len;
return this;
}
这两个方法一起看,第一个方法调用第二个方法,第一个方法将第二个参数转换成String传给第二个方法。
第二个方法先判断第一个参数是否越界,否则抛出异常。然后判断第二个字符串参数是否为空,如果为空的话将第二个参数设置为"null"。
然后给value扩容,扩大的容量是参数的长度。
获取参数长度,其值赋给变量len。
然后进行数组拷贝,将value数组的offset下标之后拷贝到value数组的offset+len下标之后,拷贝的长度count-offset个。
然后将参数拷贝到value的offset处。count自增len个。
最后返回本对象。
public AbstractStringBuilder insert(int offset, char[] str) {
if ((offset < 0) || (offset > length()))
throw new StringIndexOutOfBoundsException(offset);
int len = str.length;
ensureCapacityInternal(count + len);
System.arraycopy(value, offset, value, offset + len, count - offset);
System.arraycopy(str, 0, value, offset, len);
count += len;
return this;
}
这个方法和上面的很相似就是少了参数,不多赘述了。