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);
}
}
Java参考自己实现简单StringBuffer类
最新推荐文章于 2023-03-25 09:00:00 发布