Java参考自己实现简单StringBuffer类

package TTTT;
/**
 * StringBuffer的接口
 * @author 佳哥
 *
 */
public interface InterFaceStringBuffer {
	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(); //返回长度

}
package TTTT;
/**
 * InterFaceStringBuffer的实现类
 * @author 佳哥
 *
 */
public class MyStringBuffer implements InterFaceStringBuffer{
	//数组容量默认16
	int capacity = 16;    //后期可以根据字符串大小扩容
	//字符串长度
	int length = 0;
	//数组定义
	char[] arrays;        //数组容量根据capacity改变
	
	//无参构造方法
    public MyStringBuffer() {
		arrays = new char[capacity];
	}
	//有参构造方法
	public MyStringBuffer(String str) {
		this();   //调用相同形参的构造方法,即无参构造方法
		//字符串为空
		if(str == null)
		{
			return;
		}
		//字符串不为空(分为两种情况,str长度小于等于容量,大于等于容量需要扩容)
		if(str.length() > capacity)   //超容
		{
			capacity  = arrays.length*2;
            arrays=new char[capacity];
		}
		if(str.length() <= capacity)   //不超容
		{
			length = str.length();   //把字符数组的长度赋给length
			System.arraycopy(str.toCharArray(), 0, arrays, 0,str.length());//把str变成字符数组并复制到arrays数组中
		
		}
	
	
	}
	

	@Override//追加方法的实现
	public void append(String str) {
		insert(length, str);
		
	}

	@Override
	public void append(char c1) {
		String str = String.valueOf(c1);
		insert(length, str);
		
	}

	@Override
	public void insert(int pos, char c2) {
		String str = String.valueOf(c2);
		insert(pos, str);
		
	}

	@Override
	public void insert(int pos, String s) {
		//边界条件判断
        if(pos<0)
            return;
          
        if(pos>length)
            return;
          
        if(null==s)
            return;
          
        //扩容原来字符串的长度加上插入字符串的长度后如果总长度大于容量,扩容为原来的1.5倍
        if(length+s.length()>capacity){
            capacity = (int) ((length+s.length())*1.5f);
            char[] newArrays = new char[capacity];//创建新的大容量的数组
            System.arraycopy(arrays, 0, newArrays, 0, length);//把原数组复制到新数组
            arrays = newArrays;//把新数组当原数组用
        }
          
        char[] cs = s.toCharArray();//把需要插入的字符串变为字符数组
          
        System.arraycopy(arrays, pos, arrays,pos+ cs.length, length-pos);  //从插入下标开始把原数组中元素往后复制推 需要插入字符串长度位
        //把要插入的数据插入到指定位置
        System.arraycopy(cs, 0, arrays, pos, cs.length);
          
        length = length+s.length();
		
	}

	@Override
	public void delete(int s) {
		
		delete(s,length);
	}

	@Override
	public void delete(int s, int e) {
		//删除下标不能越界
        if(s<0)
            return;
         
        if(s>length)
            return;
         
        if(e<0)
            return;
         
        if(e>length)
            return;
         
        if(s>=e)
            return;
        System.arraycopy(arrays, e , arrays, s, length- e);
        length-=e-s;//长度需要缩小
	}

	@Override
	public void reverse() {
		for (int i = 0; i < length/2; i++) {
			char midswap = arrays[i];
			arrays[i] = arrays[length - i - 1];
			arrays[length - i - 1] = midswap;
		}
		
	}

	@Override
	public int length() {
		
		return length;
	}
	//toString 方法实现
	public String toString()
	{
		//定义一个新的数组,复制后用于输出
		char[] newArrays = new char[length];
		System.arraycopy(arrays, 0, newArrays, 0, length);
		return new String(newArrays);
	}
	public static void main(String[] args) {
		String sttt = "我叫rvferfrvgr";
		 MyStringBuffer msb = new MyStringBuffer(sttt);
		 System.out.println(msb);
		 msb.reverse();
		 System.out.println(msb);
		 msb.insert(0,'0');
		 System.out.println(msb);
		 msb.append('3');
		 System.out.println(msb);
		 msb.append("gdvchd佳娇");
		 System.out.println(msb);
		 msb.delete(1, 3);
		 System.out.println(msb);
		 msb.delete(3);
		 System.out.println(msb);
		 
	}
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值