2010-08-17 82 views
2

我试图用新帐户更新存储的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”“HOME \\\\ jdoe”,然后在使用replaceFirst方法后得到正确的结果。

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

回答

2

replaceFirst()的论点被视为表达式,其中$\具有特殊含义。如果您希望它被视为字面字符串,请用Matcher.quoteReplacement()引用它:

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

谢谢。我其实只是发现了这一点。我在错误的级别使用它。 – Dan 2010-08-17 17:28:01