替换java字符串中未知数量的值

时间:2018-03-15 12:22:49

标签: java string

如何用空字符串替换多个单词""在java的字符串中。我尝试使用for循环来替换单引号中的那些,然后在下面的数组中添加,但它会替换每个打印输出一个单词。

String str = "this house 'is' really 'big' and 'attractive'.";
String[] values={"is","big","attractive"};
for(String s: values){
    String replaced = str.replace(s, "");
    System.out.println( replaced );
}

我得到了这个输出:

> this house ' ' really 'big' and 'attractive'.
> this house 'is' really ' ' and 'attractive'.
> this house 'is' really 'big' and ' '.

我需要的是:

> this house ' ' really ' ' and ' '.

4 个答案:

答案 0 :(得分:6)

System.out.println(str.replaceAll("is|big|attractive", ""));

答案 1 :(得分:1)

您重新开始原始String的每次迭代,而您不会修改。

您可以更改String引用的str并使用它,如下所示:

      for(String s: values){
             str = str.replace(s, "");
             System.out.println( str );
       }

答案 2 :(得分:1)

为什么您的方法有误

Java中的字符串是不可变的 - 当您调用replace时,它不会更改现有字符串的内容 - 它会返回带有修改的新字符串。所以你想要:

str= str.replace(s, "");代替String replaced = str.replace(s, "");

此外,在for循环之后编写此代码:System.out.println(str);并省略System.out.println( replaced );,因为它的位置现在位于for循环中,导致多个语句被打印。

请注意,完成所有这些操作后,代码将打印th house '' really '' and ''.而不是所需的输出。

为什么要遵循Reimeus的回答或使用通用的正则表达式

即使在更正代码后,您也无法获得所需的结果,因此:)

答案 3 :(得分:0)

您在每次迭代中重新初始化replaced。因此,您最终会得到一个字符串,其中只替换了数组values的最后一个元素。 要获得所需的输出,请尝试以下方法:

String replaced =  str;
for(String s: values){
    replaced = replaced.replace(s, "");
}