Java数据结构——串

  1. 赋值
  2. 复制
  3. 求串的长度
  4. 串的连接
  5. 求子串
  6. 串的定位
  7. 串的插入
  8. 串的删除
  9. 串的替换
  10. 判断串空
  11. 串的比较
  12. 串的清空
  13. 输出串
package String;

import java.util.*;
import java.lang.*;
public class MyString {
    private char[]chars;
    private  int length;
    public static void main(String[] args) {
        MyString str1 = new MyString("Hello");
        MyString str2 = new MyString("World");

        System.out.println("Length of str1: " + str1.getLength());
        System.out.println("Concatenation: ");
        MyString concatenated = str1.concat(str2);
        concatenated.display();

        System.out.println("Substring: ");
        MyString sub = concatenated.subString(3, 8);
        sub.display();

        System.out.println("Index of 'lo' in concatenated: " + concatenated.indexOf(new MyString("lo")));

        System.out.println("Inserting 'Beautiful' at position 5:");
        MyString inserted = concatenated.insert(5, new MyString("Beautiful"));
        inserted.display();

        System.out.println("Deleting substring from 5 to 13:");
        MyString deleted = inserted.delete(5, 13);
        deleted.display();

        System.out.println("Replacing 'llo' with 'p' in deleted:");
        MyString replaced = deleted.replace(new MyString("llo"), new MyString("p"));
        replaced.display();

        System.out.println("Comparing str1 and str2: " + str1.compareTo(str2));

        System.out.println("Clearing str1:");
        str1.clear();
        System.out.println("Is str1 empty? " + str1.isEmpty());
    }

    //构造器
    public MyString(){
        chars=new char[0];
        length=0;
    }
    public MyString(String str){
        //toCharArray()-->把字符串转换成字符数组
        chars=str.toCharArray();
        length= chars.length;
    }

    //赋值
    public void assign(String str){
        chars=str.toCharArray();
        length= chars.length;
    }

    //复制
    public MyString copy(){
        //clone()-->创建并返回一个对象的副本
        MyString newStr=new MyString();
        newStr.chars=this.chars.clone();
        newStr.length=this.length;
        return newStr;
    }

    //求串的长度
    public int getLength(){
        return this.length;
    }

    //串的连接
    public MyString concat(MyString str){
        char[] newChars=new char[length+str.length];
        //(要复制的串,从哪里开始复制,复制到那个串,复制到的起始位置,复制的长度)
        System.arraycopy(chars,0,newChars,0,length);
        System.arraycopy(str.chars,0,newChars,length,str.length);
        MyString newString=new MyString();
        newString.chars=newChars;
        newString.length=length+str.length;
        return newString;
    }

    //求子串
    public MyString subString(int start,int end){
        if(start<0 || end>length || start>end){
            throw new IllegalArgumentException("无效的start和end");
        }
        char []subChars=new char[end-start];
        System.arraycopy(chars,start,subChars,0,end-start);
        MyString newString=new MyString();
        newString.chars=subChars;
        newString.length=end-start;
        return newString;
    }

    //串的定位
    public int indexOf(MyString substr){
        if(substr.length>length){
            return -1;
        }
        //创建了一个标签
        //如果匹配不成功就会跳到outer:继续执行
        //不能用break,用break就跳出内层for,执行return i了
        outer:
        for(int i=0;i<length-substr.length;i++){
            for(int j=0;j< substr.length;j++){
                if(chars[i+j]!=substr.chars[j]){
                    continue outer;
                }
            }
            return i;
        }
        return -1;
    }

    //串的插入
    public MyString insert(int pos,MyString substr){
        if(pos<0 || pos>length){
            throw new IllegalArgumentException("无效的start和end");
        }
        char[] newChars = new char[length+ substr.length];
        System.arraycopy(chars,0,newChars,0,pos);
        System.arraycopy(substr.chars,0,newChars,pos,substr.length);
        System.arraycopy(chars,pos,newChars,pos+substr.length,length-pos);
        MyString newString =new MyString();
        newString.chars=newChars;
        newString.length=length+ substr.length;
        return newString;
    }
    //串的删除
    public MyString delete(int start,int end){
        if(start<0 || end>length || start>end){
            throw new IllegalArgumentException("无效的start和end");
        }
        char[] newChars=new char[length-(end-start)];
        System.arraycopy(chars,0,newChars,0,start);
        System.arraycopy(chars,end,newChars,start,length-end);
        MyString newString = new MyString();
        newString.chars=newChars;
        newString.length=length-(end-start);
        return newString;
    }

    //串的替换
    public MyString replace(MyString target,MyString replacement){
        int index=indexOf(target);
        if(index==-1){
            return this;
        }
//        MyString newString=delete(index,index+ target.length);
//        newString=newString.insert(index,replacement);
        MyString newString;
        newString=delete(index,index+ target.length);
        newString.insert(index,replacement);
        return newString;
    }

    //判断串空
    public boolean isEmpty(){
        return length==0;
    }

    //串的比较
    public int compareTo(MyString str){
        int minLength=Math.min(length, str.length);
        for(int i=0;i<minLength;i++){
            if(chars[i]!=str.chars[i]){
                return chars[i]-str.chars[i];
            }
        }
        return length-str.length;
    }

    //串的清空
    public void clear(){
        chars=new char[0];
        length=0;
    }
    
    //输出串
    public void display(){
        for(char c:chars){
            System.out.print(c);
        }
        System.out.println();
    }
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值