JAVA-蓝桥杯-算法提高 字符串的操作

问题描述
  给出一个字符串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 字符串操作 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        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());
	}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值