我正在尝试使用新帐户更新存储的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()方法?
答案 0 :(得分:2)
replaceFirst()
的参数被视为$
和\
具有特殊含义的表达式。如果您希望将其视为文字字符串,则使用Matcher.quoteReplacement()
引用它:
tempAcct.setDefinition(ExtractNTAccount.matcher(
tempAcct.getDefinition()).replaceFirst(
Matcher.quoteReplacement("nt=\"" + newNTLogin + "\"")));