您的位置:首页 > 产品设计 > UI/UE

共同学习Java源代码--常用工具类--AbstractStringBuilder(七)

2016-04-27 22:01 417 查看
public AbstractStringBuilder insert(int index, char[] str, int offset,

int len)

{

if ((index < 0) || (index > length()))

throw new StringIndexOutOfBoundsException(index);

if ((offset < 0) || (len < 0) || (offset > str.length - len))

throw new StringIndexOutOfBoundsException(

"offset " + offset + ", len " + len + ", str.length "

+ str.length);

ensureCapacityInternal(count + len);

System.arraycopy(value, index, value, index + len, count - index);

System.arraycopy(str, offset, value, index, len);

count += len;

return this;

}

这个方法是插入字符串的方法,有四个参数,第一个参数是要插入在哪个下标之后,第二个参数是要插入的字符数组,第三个是在参数数组的开始拷贝下标,第四个参数是要插入的长度。

首先判断下表是否越界,否则抛出异常。

然后给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;

}

这个方法和上面的很相似就是少了参数,不多赘述了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: