志在指尖
用双手敲打未来

数字与字符串 MyStringBuffer

自己开发一个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);
}
}

未经允许不得转载:IT技术网站 » 数字与字符串 MyStringBuffer
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载