问题描述
给出一个字符串S,然后给出q条指令,分别有4种:
1. Append str
表示在S的最后追加一个字符串str。
例:
原字符串:ABCDE
执行 Append FGHIJ 后
字符串变为:ABCDEFGHIJ
2. Insert x str
表示在位置x处插入一个字符串str。(输入保证0<x<=当前字符串长度)
例:
原字符串:ABCGHIJ
执行 Insert 4 DEF 后
字符串变为:ABCDEFGHIJ
3. Swap a b c d
表示交换从第a位到第b位的字符串与从第c位到第d位的字符串。(输入保证0<a<b<c<d<=当前字符串长度)
例:
原字符串:ABGHIFCDEJ
执行 Swap 3 5 7 9后
字符串变为:ABCDEFGHIJ
4. Reverse a b
表示将从第a位到第b位的字符串反转。(输入保证0<a<b<=当前字符串长度)
例:
原字符串:ABGFEDCHIJ
执行 Reverse 3 7 后
字符串变为:ABCDEFGHIJ
最后输出按顺序执行完指令后的字符串。
import java.util.Scanner;
public class 字符串操作 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int num = sc.nextInt();
String str1=sc.nextLine();
StringBuilder SB= new StringBuilder();
SB.append(str);
for (int i = 0; i <num; i++) {
str1=sc.nextLine();
String CF[] = str1.split(" ");
if (CF[0].equals("Append")){
SB.append(CF[1]);
}if (CF[0].equals("Insert")) {
int length = CF[2].length();
int start = Integer.parseInt(CF[1]);
String s = SB.substring(start-1);
SB.replace(start-1, start+length-1, CF[2]);
if (start+length<SB.length()) {
SB.replace(start+length-1, SB.length(),s);
}
else {
SB.append(s);
}
}if (CF[0].equals("Reverse")) {
int start = Integer.parseInt(CF[1]);
int stop = Integer.parseInt(CF[2]);
String s = SB.substring(start-1, stop);
StringBuilder a = new StringBuilder();
for (int j = 0; j < s.length(); j++) {
a.append(s.charAt(s.length()-j-1));
}
SB.replace(start-1, stop, a.toString());
}if (CF[0].equals("Swap")) {
int start=Integer.parseInt(CF[1]);
int stop=Integer.parseInt(CF[2]);
int start1=Integer.parseInt(CF[3]);
int stop1=Integer.parseInt(CF[4]);
String s = SB.substring(start-1,stop);
String s1 = SB.substring(start1-1,stop1);
SB.replace(start1-1, stop1, s);
SB.replace(start-1, stop, s1);
}
}
System.out.println(SB.toString());
}
}