上一篇自定义了MyString类,在字符串操作时不会改变原串的值。本文的MyStringBuffer类作为缓冲串类,在字符串操作时可以改变原串的值,所以必须采用可变长的数组存储结构,比如在字符串连接时数组要先加长自己的空间再将字符串拼接到一起。
MyStringBuffer类设计如下:(只写了部分方法)
package String;
/**
* @author sun
* 创建时间:2017年4月5日下午4:09:21
*/
/*MyStringBuffer类称为缓冲串类
* 采用可变长数组存储结构
* */
public class MyStringBuffer {
private char[] value;
private int count;
private void expandCapacity(int newCapacity){//重新申请内存空间
char[] newValue = new char[newCapacity];//申请内存空间
arrayCopy(value,0,newValue,0,count);//复制原字符数组
value = newValue;//让value指向新创建的数组
}
static void arrayCopy(char[] src,int srcPos,char[] dst,int dstPos,int length){
//字符数组复制,src为源串的字符数组,srcPos为源串的起始下标
//dst为目标串的字符数组,dstPos为目标串的起始下标,length为新串的长度
if(src.length-srcPos<length || dst.length-dstPos<length)
throw new StringIndexOutOfBoundsException(length);
for(int i=0;i<le