练习:从另一个中删除所有字符串

xhe*_*nry 8 java

我正在做一些初学者的编码练习,我遇到了这个问题:给定两个字符串,base和remove,返回一个基本字符串的版本,其中删除了删除字符串的所有实例.(不区分大小写).

这是我到目前为止所做的,但它根本不起作用.

public String withoutString(String base, String remove) {

 for (int i=0; i<base.length()-remove.length(); i++){
  if (base.substring(i, i+remove.length()).equals(remove)){
  base = base.substring(i, base.indexOf("remove")-1) + base.substring(base.indexOf("remove"), base.length()-remove.length());
    }
  }
  return base;
}
Run Code Online (Sandbox Code Playgroud)

我还没有处理区分大小写的部分,以使其对我自己更加明显.我也不确定为什么我不能使用base.replaceAll("remove",""); 任何帮助表示赞赏.

编辑*:我犯了一个新手错误,替换所有仍然有效.另外,我怎么能用循环和条件做到这一点?它会像我以前一样凌乱吗?

Jav*_*vil 10

您可以使用

String result = base.replaceAll(remove,"");
Run Code Online (Sandbox Code Playgroud)

在你尝试的地方使用引号实际上是试图删除字符串"remove".

要处理不区分大小写的情况,您可以使用正则表达式标志来忽略(?i)前面的情况,然后您可以调用

String result = base.replaceAll("(?i)" + remove,"");
Run Code Online (Sandbox Code Playgroud)

这意味着String remove现在是一个正则表达式,因此特殊字符可能会产生不希望的结果.例如,如果删除字符串.,则最终会删除每个字符.如果你不想将它作为正则表达式那么使用

String result =  Pattern.compile(remove, Pattern.LITERAL).matcher(base).replaceAll("")
Run Code Online (Sandbox Code Playgroud)

其中还可以包含不区分大小写的标志,因为它们是位掩码,请参阅Pattern以获取更多信息

Pattern.LITERAL | Pattern.CASE_INSENSITIVE
Run Code Online (Sandbox Code Playgroud)

编辑

要使用你的循环,只需执行此循环

for (int i=0; i <= base.length()-remove.length(); i++)
{
    if (base.substring(i, i+remove.length()).equals(remove))
    {  
        base = base.substring(0, i) + base.substring(i + remove.length() , base.length());
        i--;
    }
}
Run Code Online (Sandbox Code Playgroud)