有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java删除字符串的中间部分

我希望以下输入具有以下输出:

input: adele
output: ae

代码:

public class delDel {
    public static String delDel(String str) {
        StringBuilder sb = new StringBuilder();
        if(str.length() < 3){
           return str;
        }
        else if(str.substring(1, 3).equals("del")){
            StringBuilder afterRemove = sb.delete(1, 3);
            return afterRemove.toString();
        }
        else{
           return str;
        }

   }

   public static void main(String[] args) {
      Scanner input = new Scanner(System.in);

      String yourStr = input.nextLine();

      System.out.println(delDel(yourStr));
   }
}

但我一直得到相同的输入


共 (1) 个答案

  1. # 1 楼答案

    这里有多个问题:

    • 您的StringBuilder未使用输入字符串初始化。它应该是StringBuilder sb = new StringBuilder(str);因此,它总是空的
    • substringdelete方法处理最后一个索引是独占的,而不是包含的。因此,要获取从索引1开始的长度为3的子字符串,需要调用str.substring(1, 4)

    更正代码:

    public static String delDel(String str) {
        StringBuilder sb = new StringBuilder(str);
        if(str.length() < 3){
           return str;
        }
        else if(str.substring(1, 4).equals("del")){
            StringBuilder afterRemove = sb.delete(1, 4);
            return afterRemove.toString();
        }
        else{
           return str;
        }
    }
    

    旁注:由于只在一种情况下使用StringBuilder,因此可以将其声明移动到else if中(这样,当字符串少于3个字符时,就不会创建无用的对象)