学会自己开发一个简单JAVA STRINGBUFFER
先创建一个接口 IStringBuffer
package character;
public interface IStringBuffer {
public void append(String str); //追加字符串
public void append(char c); //追加字符
public void insert(int pos,char b); //指定位置插入字符
public void insert(int pos,String b); //指定位置插入字符串
public void delete(int start); //从开始位置删除剩下的
public void delete(int start,int end); //从开始位置删除结束位置-1
public void reverse(); //反转
public int length(); //返回长度
}
创建 MyStringBuffer
package character;
public class MyStringBuffer implements IStringBuffer{
int capacity = 16; //定义空间为16
int length = 0; //初始化长度为0
char[] value; //创建字符型数组
public MyStringBuffer(){
value = new char[capacity]; //实例化定义空间
}
//有参构造方法
public MyStringBuffer(String str){
this();
if(null==str) { //如果str为空则返回自定义实例对象
return;
}
if(capacity<str.length()){ //如果存入的字符超出定义空间,则对空间进行2倍扩充,重新赋值
capacity = value.length*2;
value=new char[capacity];
}
if(capacity>=str.length()) { //如果存入字符不超过内存空间则从头部进行字符串拼接
System.arraycopy(str.toCharArray(), 0, value, 0, str.length());
}
length = str.length();
}
@Override
public void append(String str) { //重写接口中添加方法
insert(length,str);
}
@Override
public void append(char c) {
append(String.valueOf(c));
}
@Override
public void insert(int pos, char b) {
insert(pos,String.valueOf(b));
}
@Override
public void delete(int start) {
delete(start,length);
}
@Override
public void delete(int start, int end) {
//边界条件判断
if(start<0) {
return;
}
if(start>length) {
return;
}
if(end<0) {
return;
}
if(end>length) {
return;
}
if(start>=end) {
return;
}
System.arraycopy(value, end, value, start, length- end);
length-=end-start;
}
@Override
public void reverse() { //反转
for (int i = 0; i < length/2; i++) {
char temp = value[i];
value[i] = value[length-i-1];
value[length-i-1] = temp;
}
}
@Override
public int length() {
// TODO Auto-generated method stub
return length;
}
@Override
public void insert(int pos, String b) {
//边界条件判断
if(pos<0) {
return;
}
if(pos>length) {
return;
}
if(null==b) {
return;
}
//扩容
while(length+b.length()>capacity){
capacity = (int) ((length+b.length())*1.5f);
char[] newValue = new char[capacity];
System.arraycopy(value, 0, newValue, 0, length);
value = newValue;
}
char[] cs = b.toCharArray();
//先把已经存在的数据往后移
System.arraycopy(value, pos, value,pos+ cs.length, length-pos);
//把要插入的数据插入到指定位置
System.arraycopy(cs, 0, value, pos, cs.length);
length = length+cs.length;
}
@Override
public String toString(){
char[] realValue = new char[length];
System.arraycopy(value, 0, realValue, 0, length);
return new String(realValue);
}
public static void main(String[] args) {
MyStringBuffer sb = new MyStringBuffer("there light");
System.out.println(sb);
sb.insert(0, "let ");
System.out.println(sb);
sb.insert(10, "be ");
System.out.println(sb);
sb.insert(0, "God Say:");
System.out.println(sb);
sb.append("!");
System.out.println(sb);
sb.append('?');
System.out.println(sb);
sb.reverse();
System.out.println(sb);
sb.reverse();
System.out.println(sb);
sb.delete(0,4);
System.out.println(sb);
sb.delete(4);
System.out.println(sb);
}
}
转载自https://how2j.cn/p/5832
仅以用来自我学习,非作他用
部分代码注释部分为个人理解添加,如有错误之处,谢谢指出