我正在做一些初学者的编码练习,我遇到了这个问题:给定两个字符串,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/