[蓝桥杯]字符串编辑

问题 1621: [蓝桥杯][算法训练VIP]字符串编辑

题目描述

从键盘输入一个字符串(长度< =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则应全部替换。
在编辑过程中,若出现被改的字符不存在时,则给出提示信息。

样例解释

命令为删去s,第一个在字符中出现的s在This中,即得到结果。

输入

输入共两行,第一行为原串(以’.’结束),第二行为命令(输入方式参见“问题描述” 。

输出

输出共一行,为修改后的字符串或输出指定字符不存在的提示信息。

样例输入

This is a book. 
D  s 

样例输出

Thi is a book.

方法一:

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * User: 76147
 * Date: 2020-01-28
 * Time: 20:35
 * Description:
 */
public class 字符串编辑 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        int l = str.indexOf(".");
        str = str.substring(0, l + 1);

        String ml = sc.next();
        switch (ml) {
            case "D":
                String m = sc.next();
                int j = str.indexOf(m);
                if (j < 0) {
                    System.out.println("指定字符不存在");
                } else {
                    str = str.replaceFirst(m, "");
                }
                break;
            case "I":
                String a1 = sc.next();
                String a2 = sc.next();
                int i = str.lastIndexOf(a1);
                if (i < 0) {
                    System.out.println("指定字符不存在");
                } else {
                    a2 = str.substring(0, i) + a2;
                    str = a2 + str.substring(i);
                }
                break;
            case "R":
                String a3 = sc.next();
                String a4 = sc.next();
                if (str.indexOf(a3) < 0) {
                    System.out.println("指定字符不存在");
                } else {
                    str = str.replaceAll(a3, a4);
                }
                break;
            default:
                sc.close();

        }
        System.out.println(str);

    }
}

方法二:(StringBuffer有封装好的方法)

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * User: 76147
 * Date: 2020-01-28
 * Time: 21:16
 * Description:
 */
public class 字符串编辑2 {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            String s1 = scan.nextLine();
            int t1 = s1.indexOf('.');
            String s = s1.substring(0, t1 + 1);//截取以.为结束的字符串
            //System.out.println(s);
            StringBuffer ss = new StringBuffer(s);//转换成StringBuffer类型,便于后面的操作
            //输入指令
            String order = scan.next();
            switch (order) {
                case "D": {
                    String del = scan.next();
                    t1 = ss.indexOf(del);
                    if (t1 == -1)
                        System.out.println("指定字符不存在");
                    else {
                        ss.deleteCharAt(t1);//删除指定索引的字符
                    }
                    break;
                }
                case "I": {
                    String a1 = scan.next();
                    String a2 = scan.next();
                    t1 = ss.lastIndexOf(a1);
                    if (t1 == -1)
                        System.out.println("指定字符不存在");
                    else {
                        ss.insert(t1, a2);//插入
                    }
                    break;
                }
                case "R": {
                    String a3 = scan.next();
                    String a4 = scan.next();
                    t1 = ss.indexOf(a3);
                    if (t1 == -1)
                        System.out.println("指定字符不存在");
                    else {
                        while (t1 != -1)
                        {
                            char c = a4.charAt(0);
                            ss.setCharAt(t1, c);
                            t1 = ss.indexOf(a3);
                        }
                    }
                    break;
                }
            }
            System.out.println(ss);
            scan.close();
        }
    }

}

以下是 StringBuffer 类支持的主要方法:

序号 方法描述
1 public StringBuffer append(String s) 将指定的字符串追加到此字符序列。
2 public StringBuffer reverse() 将此字符序列用其反转形式取代。
3 public delete(int start, int end) 移除此序列的子字符串中的字符。
4 public insert(int offset, int i) 将 int 参数的字符串表示形式插入此序列中。
5 replace(int start, int end, String str) 使用给定 String 中的字符替换此序列的子字符串中的字符。

下面的列表里的方法和 String 类的方法类似:

序号 方法描述
1 int capacity() 返回当前容量。
2 char charAt(int index) 返回此序列中指定索引处的 char 值。
3 void ensureCapacity(int minimumCapacity) 确保容量至少等于指定的最小值。
4 void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将字符从此序列复制到目标字符数组 dst
5 int indexOf(String str) 返回第一次出现的指定子字符串在该字符串中的索引。
6 int indexOf(String str, int fromIndex) 从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。
7 int lastIndexOf(String str) 返回最右边出现的指定子字符串在此字符串中的索引。
8 int lastIndexOf(String str, int fromIndex) 返回 String 对象中子字符串最后出现的位置。
9 int length() 返回长度(字符数)。
10 void setCharAt(int index, char ch) 将给定索引处的字符设置为 ch
11 void setLength(int newLength) 设置字符序列的长度。
12 CharSequence subSequence(int start, int end) 返回一个新的字符序列,该字符序列是此序列的子序列。
13 String substring(int start) 返回一个新的 String,它包含此字符序列当前所包含的字符子序列。
14 String substring(int start, int end) 返回一个新的 String,它包含此序列当前所包含的字符子序列。
15 String toString() 返回此序列中数据的字符串表示形式。

你可能感兴趣的:([蓝桥杯]字符串编辑)