我正在做一些初学者的编码练习,我遇到了这个问题:给定两个字符串,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仍然有效。另外,我怎么能用循环和条件做到这一点?它会像我以前一样凌乱吗?
答案 0 :(得分:10)
您可以使用
String result = base.replaceAll(remove,"");
在您尝试的地方使用引号实际上是尝试删除字符串"remove"
。
要处理不区分大小写的情况,您可以在正面使用正则表达式标记忽略大小写(?i)
,然后您可以调用
String result = base.replaceAll("(?i)" + remove,"");
这确实意味着String 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--;
}
}
答案 1 :(得分:1)
indexOf("remove")
表示您正在搜索(固定)STRING remove
,而不是String
名为remove
的值 - 这是最不喜欢的,是什么你想做什么。同样适用于replaceAll("remove")
尝试。
删除"
,以便使用名为remove
的字符串的VALUE,而不是固定字符串"remove"
示例:
String remove = "test";
System.out.println(remove) // will print: test
System.out.println("remove") // will print: remove
答案 2 :(得分:0)
您应该使用(?i)
标志或:
base = Pattern.compile(remove, Pattern.CASE_INSENSITIVE).matcher(base).replaceAll("");
答案 3 :(得分:0)
试试这个:
if(base.indexOf(remove) != -1){
base.replaceAll(remove,"");
}