ReplaceAll和“不替换

时间:2011-05-20 08:45:13

标签: java string

任何人都可以指出我的第一个是如何工作而第二个不工作?我很困惑为什么第二个if子句不起作用。我想得到一个提示,谢谢。

String msg = o.getTweet();
        if (msg.indexOf("&") > 0) {
            msg = msg.replaceAll("&", "&");// vervangt & door &
        }
        if (msg.indexOf(""") > 0) {
            msg = msg.replaceAll(""", "aa"); //vervangt " door "
        }

2 个答案:

答案 0 :(得分:16)

因为ZERO非常有效的索引。试试这个,

    String msg = o.getTweet();
    if (msg.indexOf("&") != -1) {
        msg = msg.replaceAll("&", "&");// vervangt & door &
    }
    if (msg.indexOf(""") != -1) {
        msg = msg.replaceAll(""", "aa"); //vervangt " door "
    }

<强>解释

String.indexOf(String str)的文档解释说,“如果字符串参数作为此对象中的子字符串出现,则返回第一个此类子字符串的第一个字符的索引;如果不发生作为子字符串,返回-1。“ - [link to docs]

这可以像下面一样简单,OpenSauce指出here

msg = msg.replace("&amp;", "&").replace("&quot;", "\"");

有用的链接:

答案 1 :(得分:11)

如果找不到子字符串,则不需要检查子字符串是否存在,replacereplaceAll方法是无操作。由于您不是在寻找正则表达式,因此您也可以使用replace而不是replaceAll - 它会更有效率,如果您还想检查发生的其他字符串,也不会让您感到惊讶包含正则表达式特殊字符。

msg = msg.replace("&amp;", "&").replace("&quot;", "\"");

请注意,replace确实会替换所有匹配,就像您想要的那样。 replacereplaceAll之间的区别在于arg是否被解释为正则表达式。