共同学习Java源代码--常用工具类--AbstractStringBuilder(七)
来源:互联网 发布:达芬奇恶魔知乎 编辑:程序博客网 时间:2024/06/09 14:31
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;
}
这个方法和上面的很相似就是少了参数,不多赘述了。
- 共同学习Java源代码--常用工具类--AbstractStringBuilder(七)
- 共同学习Java源代码--常用工具类--AbstractStringBuilder(一)
- 共同学习Java源代码--常用工具类--AbstractStringBuilder(二)
- 共同学习Java源代码--常用工具类--AbstractStringBuilder(三)
- 共同学习Java源代码--常用工具类--AbstractStringBuilder(四)
- 共同学习Java源代码--常用工具类--AbstractStringBuilder(五)
- 共同学习Java源代码--常用工具类--AbstractStringBuilder(六)
- 共同学习Java源代码--常用工具类--AbstractStringBuilder(八)
- 共同学习Java源代码--常用工具类--AbstractStringBuilder(九)
- 共同学习Java源代码--常用工具类--StringBuffer(一)
- 共同学习Java源代码--常用工具类--StringBuffer(二)
- 共同学习Java源代码--常用工具类--StringBuffer(三)
- 共同学习Java源代码--常用工具类--StringBuffer(四)
- 共同学习Java源代码--数据结构--ArrayList类(七)
- 共同学习Java源代码--数据结构--LinkedList类(七)
- 共同学习Java源代码-数据结构-HashMap(七)
- 共同学习Java源代码--数据结构--AbstractSequentialList类
- 共同学习Java源码--常用数据类型--String(七)
- HDU2053
- scrollTo、scrollBy、getScrollX、getScrollY这4个方法的含义
- UVa 400 Unix Is
- Fragment知识总结
- Spark-000讲:What is Spark ?
- 共同学习Java源代码--常用工具类--AbstractStringBuilder(七)
- poj 2632Crashing Robots
- vi/vim编辑器必知必会
- leetcode-58. Length of Last Word
- 自定义控件三部曲之绘图篇(十)——Paint之setXfermode(一)
- Python分析网页神器pyquery
- 第五章 Python数据结构
- UUID生成器
- JavaScript与HTML_DOM