1.IString是接口,注意里面的比较,连接,插入方法,在注意SeqString类比较连接插入这3个方法的参数
问题:1.类中的方法,接口参数有什么用处?可以换为String str或者SeqString str吗
2.注意compareTo(IString str)这样传参数就错呢?而SeqString str 就对呢?
3是不是compareto 的返回类型导致的,但是接口里的参数这样写没问题啊
4,有些方法的返回类型是接口,有什么用、
public interface IString {
public void clear();//串的置空操作
public boolean isEmpty();//串的判空操作
public int length();//求串的长度
public char charAt(int index);//取字符
public IString subString(int begin,int end);//取子串
public IString insert(int offset,IString str);//插入
public IString delete(int begin,int end);//删除
public IString concat(IString str);//链接
public int compareTo(IString str);//比较
public int indexOf(IString str);//字符串定位;
public class SeqString implements IString {
private char[] stringvalue;//为串申请储存空间,顺序储存
private int currentlength;//串的长度
//3个构造方法
//空串构造
//利用字符串常量构造串
//利用字符数组构造串
public SeqString() {
stringvalue=new char[0];//串的长度为零,利用顺序储存数组体现为长度构造0,申请空间为0;
currentlength=0;
}
public SeqString(String str){
stringvalue=str.toCharArray();
currentlength=stringvalue.length;
}
public SeqString(char[] value) {
stringvalue=new char[value.length];
int k=0;
for(k=0;k<value.length;k++) {
stringvalue[k]=value[k];
}
currentlength=value.length;
}
public void clear() {
currentlength=0;
}
public boolean isEmpty(){
return currentlength==0;
}
public int length(){
return currentlength;
}
public char charAt(int index) {
if(index<0||index>=currentlength) {
throw new StringIndexOutOfBoundsException(index);
}else {
return stringvalue[index];
}
}
public void allocate(int NewCapacity){
char[] tem=stringvalue;
stringvalue=new char[NewCapacity];
for(int i=0;i<tem.length;i++) {
stringvalue[i]=tem[i];
}//stringvalue扩充容量
}
public IString subString(int begin,int end){//取子串
//具体思路新建一个字符数组,将字符取出放入
//对下标进行判断
if(begin<0||end>currentlength||begin>end) {
throw new StringIndexOutOfBoundsException("下标异常");
}
if(begin==0&&end==currentlength) {
return this;
}else {
char[] buffer=new char[end-begin];//字符个数end-1-begin+1
for(int i=0;i<buffer.length;i++) {
buffer[i]=stringvalue[i+begin];
}
return new SeqString(buffer);
}
}
public IString insert(int offset,IString str) {
//插入
//0<=offset<=currentlength下标问题
//第offset位往后移动str.length
//容量问题现容量stringvalue.length 串的长度str.length+currentlength
if(offset<0||offset>currentlength) {
throw new StringIndexOutOfBoundsException("下标异常");
}
if((str.length()+currentlength)>stringvalue.length) {
allocate((str.length()+currentlength));
}
for(int i=currentlength-1;i>=offset;i--) {
stringvalue[str.length()+i]=stringvalue[i];
}
for(int t=0;t<str.length();t++) {
stringvalue[(offset+t)]=charAt(t);
}
currentlength=currentlength+str.length();
return this;
}
public IString delete(int begin,int end) {
if(begin<0||end>currentlength||begin>end) {
throw new StringIndexOutOfBoundsException("下标异常");
}
for(int i=0;i<currentlength-end;i++) {
stringvalue[begin+i]=stringvalue[end+i];//end+i<currentlength
}
currentlength=currentlength-(end-begin);
return this;
}//删除
public IString concat(IString str) {
return insert(currentlength,str);
}//链接
public int compareTo(IString str) {
int n=Math.min(currentlength,str.currentlength);
for(int k=0;k<n;k++) {
if(stringvalue[k]!=str.stringvalue[k]) {
return stringvalue[k]-str.stringvalue[k];
}
}
return currentlength-str.currentlength;
}//比较
public int indexOf(IString str) {}//字符串定位;
}