Java - 删除字符串的中间部分

Tse*_*iev 2 java

我想要以下输入的以下输出:

input: adele
output: ae
Run Code Online (Sandbox Code Playgroud)

代码:

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));
   }
}
Run Code Online (Sandbox Code Playgroud)

但我不断得到相同的输入。

Tun*_*aki 5

这里有多个问题:

  • 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • @PetterFriberg 我同意第 1 点(并且在你指出它之前犹豫要添加它)但我认为第 2 点不适用:对于初学者来说,我觉得阅读这样的代码比像`这样的长线链接调用更容易new StringBuilder(str).delete(1, 4).toString();` (2认同)