重寫Java的String及其大部分方法

ChristopherIn發表於2020-11-30

如題,閒來無事筆者琢磨著重寫Java的String字串類,以求加深理解:
程式碼如下:

package com.rabbit;

public class string {
    private char[] chars;
    public string(){

    }
    public string(String str){
      chars=new char[str.length()];
      for(int i=0;i<str.length();i++){
          chars[i]=str.charAt(i);
      }
    }
    public String toString(){
        StringBuffer str=new StringBuffer();
        for(int i=0;i<chars.length;i++){
            str.append(chars[i]);
        }
        return str.toString();
    }
    public int length(){
        return chars.length;
    }
    public int indexOf(char c){
        int index=0;
        for(int i=0;i<chars.length;i++){
            if(chars[i]==c){
                index=i;
                return index;
            }
        }
        return -1;
    }
    public int lastIndexOf(char c){
        int index=0;
        for(int i=chars.length-1;i>=0;i--){
            if(chars[i]==c){
                index=i;
                return index;
            }
        }
        return -1;
    }
    public char charAt(int k){
       return chars[k];
    }
    public boolean startsWith(String str){
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)==chars[i]){
                return true;
            }
        }
        return false;
    }
    public boolean endsWith(String str){
        for(int i=str.length()-1;i>=0;i--){
            if(str.charAt(i)==chars[chars.length-str.length()]){
                return true;
            }
        }
        return false;
    }
    public String toUpperCase(){
        StringBuffer str=new StringBuffer();
        for(int i=0;i<chars.length;i++){
            str.append((char)((int)chars[i]-32));
        }
        return str.toString();
    }
    public String toLowerCase(){
        StringBuffer str=new StringBuffer();
        for(int i=0;i<chars.length;i++){
            str.append((char)((int)chars[i]+32));
        }
        return str.toString();
    }
    public boolean equals(String str){
        if(chars.length!=str.length()){
            return false;
        }else{
            for(int i=0;i<chars.length;i++){
                if(chars[i]!=str.charAt(i)){
                    return false;
                }
            }
            return true;
        }
    }
public String trim(){
        StringBuffer str=new StringBuffer();
    for(int i=0;i<chars.length;i++){
        str.append(chars[i]);
    }
        if(chars[0]==' '||chars[0]=='\t'){
            str.delete(0,1);
        }
        if(chars[chars.length-1]==' '||chars[chars.length-1]=='\t'){
            str.delete(str.length()-1,str.length());
        }
        return str.toString();
}
public String replace(char c1,char c2){
        StringBuffer sb=new StringBuffer();
for(int i=0;i<chars.length;i++){
    if(chars[i]==c1){
        chars[i]=c2;
    }
}
    for(int i=0;i<chars.length;i++){
        sb.append(chars[i]);
    }
    return sb.toString();
}
public String substring(int a,int b) {
    StringBuffer sb=null;
        if(a>b){
            throw new StringIndexOutOfBoundsException();
        }
        try {
            sb = new StringBuffer();
            for (int i = a; i < b; i++) {
                sb.append(chars[i]);
            }
        }catch(StringIndexOutOfBoundsException e){
            e.printStackTrace();
        }
        return sb.toString();
}
    public String substring(int a) {
        StringBuffer sb = new StringBuffer();
            for (int i = a; i <chars.length; i++) {
                sb.append(chars[i]);
            }
        return sb.toString();
    }

相關文章