java:字符串编辑
题目
问题描述
从键盘输入一个字符串(长度<=40个字符),并以字符 ’.’ 结束。编辑功能有:
1 D:删除一个字符,命令的方式为: D a 其中a为被删除的字符,例如:D s 表示删除字符 ’s’ ,若字符串中有多个 ‘s’,则删除第一次出现的。
2 I:插入一个字符,命令的格式为:I a1 a2 其中a1表示插入到指定字符前面,a2表示将要插入的字符。例如:I s d 表示在指定字符 ’s’ 的前面插入字符 ‘d’ ,若原串中有多个 ‘s’ ,则插入在最后一个字符的前面。
3 R:替换一个字符,命令格式为:R a1 a2 其中a1为被替换的字符,a2为替换的字符,若在原串中有多个a1则应全部替换。
在编辑过程中,若出现被改的字符不存在时,则给出提示信息。
输入格式
输入共两行,第一行为原串(以’.’结束),第二行为命令(输入方式参见“问题描述” 。
输出格式
输出共一行,为修改后的字符串或输出指定字符不存在的提示信息。
样例输入
This is a book.
D s
样例输出
Thi is a book.
思考
StringBuffer delete(int startIndex,int endIndex)
delete(int starIndex,int endIndex)从当前StringBuffer对象的字符序列中删除一个子字符序列,并返回当前对象的引用。删除的子字符序列由下表startInedx和endIndex指定:从startIndex到endIndex-1位置处的字符序列被删除。
deleteCharAt(int index)方法删除当前StringBuffer对象实体的字符序列中的index位置处的一个字符
StringBuffer insert(int index,String str)
insert方法将参数str指定的字符序列插入到参数index指定的位置并返回当前的引用
StringBudder replace(int startIndex,int endIndex,String str)
一个子字符序列用参数str指定的字符序列替换。从startIndex,到endIndex-1,返回当前对象的引用
上面是一些操作的方法,其实还有一个重要的是以.结束这个怎么表示
觉得最后输出不输出这个就应该可以
那些字符串并不知道所需要的位置在哪,所以还是要用String,这样进行判断字符
import java.util.Scanner;
public class 字符串编辑 {
public static String s1;//为下面的字符输入做准备
public static String s2;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();//原数据
String s=sc.next();//操作命令
if(s.equals("D"))//如果只是删除就只需要一个字符,其他操作要两个字符
//为什么这里不能用==,因为存放引用和内存地址都有区别,要是用equals
s1=sc.next();
else{
s1=sc.next();
s2=sc.next();
}
switch(s){
case "D":
str=str.replaceFirst(s1,"");//把第一次出现s1的地方删除
break;
case "I"://插入
if(str.indexOf(s1)==-1){//当插入到的字符不存在时
System.out.println("字符不存在");
break;
}
int temp=str.lastIndexOf(s1);//存储从最后面检索到的第一次出现s1的位置
String s3=str.substring(0, temp);//s3表示复制了str从开始到temp-1位置的字符串
str=s3.concat(s2).concat(str.substring(temp));//s3后面加上添加的字母,之后再添加后面应有的字母
break;
case "R"://替换
if(str.indexOf(s1)==-1){
System.out.println("字符不存在");
break;
}
str=str.replaceAll(s1,s2);//替换多个s1
break;
}
System.out.println(str);
}
}