- 赋值
- 复制
- 求串的长度
- 串的连接
- 求子串
- 串的定位
- 串的插入
- 串的删除
- 串的替换
- 判断串空
- 串的比较
- 串的清空
- 输出串
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();
}
}