ReplaceAll和" 不会取代

Han*_*ore 5 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 "
        }
Run Code Online (Sandbox Code Playgroud)

Ade*_*ari 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 "
    }
Run Code Online (Sandbox Code Playgroud)

说明:

该文档String.indexOf(String str)解释说,"如果字符串参数作为此对象中的子字符串出现,则返回第一个此类子字符串的第一个字符的索引;如果它不作为子字符串出现,则返回-1." - [链接到文档]

这可以像下面这样简单地完成,正如OpenSauce这里指出的那样.

msg = msg.replace("&", "&").replace(""", "\"");
Run Code Online (Sandbox Code Playgroud)

有用的链接:

  • @Hannelore正如Adeel所说,0是一个有效的索引 - 它意味着字符串的第一个字符.所以你的代码是错误的,因为它认为0表示"未找到" - 但这并不意味着在这种情况下. (3认同)
  • 我甚至建议完全删除`if`. (2认同)
  • @Hannelore:当你的字符串以`"""`开头时,`indexOf`将返回0,因为计数从0开始. (2认同)

Ope*_*uce 11

您不需要检查子字符串是否存在,如果找不到子字符串,则replacereplaceAll方法都是no-ops.既然你不找正则表达式,你也可以使用replace,而不是replaceAll-这将在一定程度上更有效,如果你还需要检查它会包含正则表达式的特殊字符的其他琴弦不会令你大吃一惊.

msg = msg.replace("&", "&").replace(""", "\"");
Run Code Online (Sandbox Code Playgroud)

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

  • 这是一个令人困惑的API设计选择! (5认同)
  • +1.确实是公平的.喜欢给另一个+指出`replace()`和`replaceAll()`的区别. (2认同)