用包含反斜杠的字符串替换字符串的最佳方法(\)

时间:2010-08-17 16:27:21

标签: java string

我正在尝试使用新帐户更新存储的NT帐户(域\用户)。新帐户是String对象。

我通过运行以下行来调用我的replaceAccount方法执行此操作:

tempAcct.setDefinition(ExtractNTAccount.matcher(tempAcct.getDefinition()).replaceFirst("nt=\""+newNTLogin+"\""));

如果NT帐户是“HOME \ jdoe”,然后我输出tempAcct的定义字段,我将NT登录视为“HOMEjdoe”。

通过检查replaceFirst方法javadoc,可以读取以下内容:

  

“注意反斜杠()和美元   替换字符串中的符号($)   可能会导致结果不同   而不是被视为一个   字面替换字符串;看到   Matcher.replaceFirst(java.lang.String中)。   使用   Matcher.quoteReplacement(java.lang.String中)   压制的特殊含义   如果需要,这些字符。“

所以,我发现如果不是原来传递NT帐户(“HOME \ jdoe”),我会传递“HOME”+ Matcher.quoteReplacement(“\\”)+“jdoe”< / strong>,或“HOME \\\\ jdoe”,然后在使用replaceFirst方法后得到正确的结果。

这是我们可以使用的最佳方法还是我完全误解了如何使用Matcher.quoteReplacement()方法?

1 个答案:

答案 0 :(得分:2)

replaceFirst()的参数被视为$\具有特殊含义的表达式。如果您希望将其视为文字字符串,则使用Matcher.quoteReplacement()引用它:

tempAcct.setDefinition(ExtractNTAccount.matcher(
    tempAcct.getDefinition()).replaceFirst(
         Matcher.quoteReplacement("nt=\"" + newNTLogin + "\"")));