java - 练习 : removing all string occurrences from another

标签 java

我正在做一些初学者的编码练习,我遇到了这个问题:给定两个字符串,base 和 remove,返回一个版本的 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;
}

我还没有处理区分大小写的部分以使其对我自己更明显。我也不确定为什么我不能使用 base.replaceAll("remove","");感谢您的帮助。

编辑*:我犯了一个菜鸟错误,replaceAll 仍然有效。此外,我如何使用循环和条件来完成此操作?会不会像我以前那样乱七八糟?

最佳答案

你可以使用

String result = base.replaceAll(remove,"");

在您尝试使用引号时,它实际上是在尝试删除字符串 "remove"

要处理不区分大小写的问题,您可以在前面使用忽略大小写 (?i) 的正则表达式标志,这样您就可以调用

String result = base.replaceAll("(?i)" + remove,"");

这确实意味着删除的字符串现在是一个正则表达式,因此特殊字符可能会产生不需要的结果。例如,如果您的删除字符串是 .,您最终会删除所有字符。如果您不想将其作为正则表达式,请使用

String result =  Pattern.compile(remove, Pattern.LITERAL).matcher(base).replaceAll("")

它还可以包括不区分大小写的标志,因为它们是位掩码,请参阅 Pattern更多

Pattern.LITERAL | Pattern.CASE_INSENSITIVE

编辑

要使用循环来完成,只需执行此循环

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--;
    }
}

关于java - 练习 : removing all string occurrences from another,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18906651/

相关文章:

java - 微调器选择未传递到 "if"语句

java - foursquare 多请求收到 400 错误请求

java - 获取 Java int 的低 16 位作为带符号的 16 位值

java - 试过嵌套锁,还是死锁

java - 为什么处理(Java)中的这个静态属性会引发错误?

java - 如何重命名文件java?

java - 单行 JTextArea

java - jvisualvm 作为服务运行时不列出 Jboss 5.1.0GA

java - 如何在 java 卡片程序中比较随机生成的卡片?

java - ListView 选择模型的 validator ?