package character;
public class MyStringBuffer implements IStringBuffer{
int capacity = 16 ;
int length = 0 ;
char [] value;
public MyStringBuffer(){
value = new char [capacity];
}
//有参构造方法
public MyStringBuffer(String str){
this ();
if ( null ==str)
return ;
if (capacity<str.length()){
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;
}
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);
}
}
|