数字与字符串 MyString

IT技术2年前 (2022)更新 投稿用户
0

自己开发一个JavaStringBuffer

依据接口IStringBuffer,自己做一个MyStringBuffer
过程1:IStringBuffer接口
packagecharacter;publicinterfaceIStringBuffer{publicvoidappend(Stringstr);//追加字符串publicvoidappend(charc);//追加字符publicvoidinsert(intpos,charb);//指定方位刺进字符publicvoidinsert(intpos,Stringb);//指定方位刺进字符串publicvoiddelete(intstart);//从开端方位删去剩余的publicvoiddelete(intstart,intend);//从开端方位删去结束方位-1publicvoidreverse();//回转publicintlength();//返回长度}
过程2:value和capacity
value:用于寄存字符数组
capacity:容量
无参结构办法:依据容量初始化value
publicMyStringBuffer(){
value=newchar[capacity];
}packagecharacter;publicclassMyStringBufferimplementsIStringBuffer{intcapacity=16;intlength=0;char[]value;publicMyStringBuffer(){
value=newchar[capacity];
}@Overridepublicvoidappend(Stringstr){//TODOAuto-generatedmethodstub}@Overridepublicvoidappend(charc){//TODOAuto-generatedmethodstub}@Overridepublicvoidinsert(intpos,charb){//TODOAuto-generatedmethodstub}@Overridepublicvoiddelete(intstart){//TODOAuto-generatedmethodstub}@Overridepublicvoiddelete(intstart,intend){//TODOAuto-generatedmethodstub}@Overridepublicvoidreverse(){//TODOAuto-generatedmethodstub}@Overridepublicintlength(){//TODOAuto-generatedmethodstubreturn0;

Java


}
}
过程3:带参结构办法
packagecharacter;publicclassMyStringBufferimplementsIStringBuffer{intcapacity=16;intlength=0;char[]value;publicMyStringBuffer(){
value=newchar[capacity];
}//有参结构办法publicMyStringBuffer(Stringstr){if(null!=str)
value=str.toCharArray();
length=value.length;if(capacity2;
}@Overridepublicvoidappend(Stringstr){//TODOAuto-generatedmethodstub}@Overridepublicvoidappend(charc){//TODOAuto-generatedmethodstub}@Overridepublicvoidinsert(intpos,charb){
}@Overridepublicvoiddelete(intstart){//TODOAuto-generatedmethodstub}@Overridepublicvoiddelete(intstart,intend){//TODOAuto-generatedmethodstub}@Overridepublicvoidreverse(){//TODOAuto-generatedmethodstub}@Overridepublicintlength(){//TODOAuto-generatedmethodstubreturnlength;
}@Overridepublicvoidinsert(intpos,Stringb){
}
}
过程4:回转reverse
packagecharacter;publicclassMyStringBufferimplementsIStringBuffer{intcapacity=16;intlength=0;char[]value;publicMyStringBuffer(){
value=newchar[capacity];
}//有参结构办法publicMyStringBuffer(Stringstr){this();if(null==str)return;if(capacity<str.length()){
capacity=value.length*2;
value=newchar[capacity];
}if(capacity>=str.length())
System.arraycopy(str.toCharArray(),0,value,0,str.length());
length=str.length();
}@Overridepublicvoidreverse(){for(inti=0;i<length/2;i++){chartemp=value[i];
value[i]=value[length-i-1];
value[length-i-1]=temp;
}
}@Overridepublicvoidappend(Stringstr){//TODOAuto-generatedmethodstub}@Overridepublicvoidappend(charc){//TODOAuto-generatedmethodstub}@Overridepublicvoidinsert(intpos,charb){//TODOAuto-generatedmethodstub}@Overridepublicvoidinsert(intpos,Stringb){//TODOAuto-generatedmethodstub}@Overridepublicvoiddelete(intstart){//TODOAuto-generatedmethodstub}@Overridepublicvoiddelete(intstart,intend){//TODOAuto-generatedmethodstub}@Overridepublicintlength(){//TODOAuto-generatedmethodstubreturnlength;
}publicStringtoString(){char[]realValue=newchar[length];
System.arraycopy(value,0,realValue,0,length);returnnewString(realValue);
}publicstaticvoidmain(String[]args){
MyStringBuffersb=newMyStringBuffer(“therelight”);
sb.reverse();
System.out.println(sb);
}
}
过程5:刺进insert和append
边界条件判别
刺进之前,首先要判别的是一些边界条件。比方刺进方位是否合法,刺进的字符串是否为空
扩容
要判别是否需求扩容。假如刺进的字符串加上已经存在的内容的总长度超过了容量,那么就需求扩容。
数组的长度是固定的,不能改变的,数组自身不支持扩容。我们使用变通的办法来解决这个问题。
依据需求刺进的字符串的长度和已经存在的内容的长度,计算出一个新的容量。然后依据这个容量,创立一个新的数组,接着把本来的数组的内容,复制到这个新的数组中来。而且让value这个引用,指向新的数组,从而到达扩容的作用。
刺进字符串
找到要刺进字符串的方位,从这个方位开端,把原数据当作两段,把后半段向后挪动一个距离,这个距离刚好是刺进字符串的长度
然后把要刺进的数据,刺进这个挪出来的,刚刚好的方位里。
修正length的值
最终修正length的值,是本来的值加上刺进字符串的长度
insert(int,char)
参数是字符的insert办法,经过调用insert(int,String)也就完成了。
append
追加,就是在最终方位刺进。所以不需求单独开发办法,直接调用insert办法,就能到达最终方位刺进的作用
packagecharacter;publicclassMyStringBufferimplementsIStringBuffer{intcapacity=16;intlength=0;char[]value;publicMyStringBuffer(){
value=newchar[capacity];
}//有参结构办法publicMyStringBuffer(Stringstr){this();if(null==str)return;if(capacity2;
value=newchar[capacity];
}if(capacity>=str.length())
System.arraycopy(str.toCharArray(),0,value,0,str.length());
length=str.length();
}@Overridepublicvoidappend(Stringstr){
insert(length,str);
}@Overridepublicvoidappend(charc){
append(String.valueOf(c));
}@Overridepublicvoidinsert(intpos,charb){
insert(pos,String.valueOf(b));
}@Overridepublicvoiddelete(intstart){//TODOAuto-generatedmethodstub}@Overridepublicvoiddelete(intstart,intend){//TODOAuto-generatedmethodstub}@Overridepublicvoidreverse(){for(inti=0;i<length/2;i++){chartemp=value[i];
value[i]=value[length-i-1];
value[length-i-1]=temp;
}
}@Overridepublicintlength(){//TODOAuto-generatedmethodstubreturnlength;
}@Overridepublicvoidinsert(intpos,Stringb){//边界条件判别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=newchar[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;
}publicStringtoString(){char[]realValue=newchar[length];
System.arraycopy(value,0,realValue,0,length);returnnewString(realValue);
}publicstaticvoidmain(String[]args){
MyStringBuffersb=newMyStringBuffer(“therelight”);
System.out.println(sb);
sb.insert(0,”let”);
System.out.println(sb);
sb.insert(10,”be”);
System.out.println(sb);
sb.insert(0,”GodSay:”);
System.out.println(sb);
sb.append(“!”);
System.out.println(sb);
sb.append(‘?’);
System.out.println(sb);
sb.reverse();
System.out.println(sb);
}
}
过程6:删去delete
删去delete
packagecharacter;publicclassMyStringBufferimplementsIStringBuffer{intcapacity=16;intlength=0;char[]value;publicMyStringBuffer(){
value=newchar[capacity];
}//有参结构办法publicMyStringBuffer(Stringstr){this();if(null==str)return;if(capacity2;
value=newchar[capacity];
}if(capacity>=str.length())
System.arraycopy(str.toCharArray(),0,value,0,str.length());
length=str.length();
}@Overridepublicvoidappend(Stringstr){
insert(length,str);
}@Overridepublicvoidappend(charc){
append(String.valueOf(c));
}@Overridepublicvoidinsert(intpos,charb){
insert(pos,String.valueOf(b));
}@Overridepublicvoiddelete(intstart){
delete(start,length);
}@Overridepublicvoiddelete(intstart,intend){//边界条件判别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;
}@Overridepublicvoidreverse(){for(inti=0;i<length/2;i++){chartemp=value[i];
value[i]=value[length-i-1];
value[length-i-1]=temp;
}
}@Overridepublicintlength(){//TODOAuto-generatedmethodstubreturnlength;
}@Overridepublicvoidinsert(intpos,Stringb){//边界条件判别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=newchar[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;
}publicStringtoString(){char[]realValue=newchar[length];
System.arraycopy(value,0,realValue,0,length);returnnewString(realValue);
}publicstaticvoidmain(String[]args){
MyStringBuffersb=newMyStringBuffer(“therelight”);
System.out.println(sb);
sb.insert(0,”let”);
System.out.println(sb);
sb.insert(10,”be”);
System.out.println(sb);
sb.insert(0,”GodSay:”);
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);
}
}

© 版权声明
好牛新坐标 广告
版权声明:
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com

相关文章