2011-10-14 132 views
1

我面临String类的replaceAll方法的奇怪行为。String的replaceAll方法的奇怪行为

我有一个包含以下数据

keyRPT1={keyRPT11=01|keyRPT19=01}|keyRPT3={keyRPT11=03|keyRPT19=01}|keyRPT8={keyRPT11=08|keyRPT19=01} 

我下面写代码的字符串缓冲区,以取代"keyRPT11=08|keyRPT19=01""keyRPT11=08|keyRPT19=2"

我使用下面的代码为

String complementaryInformation = "keyRPT1={keyRPT11=01|keyRPT19=01}|keyRPT3={keyRPT11=03|keyRPT19=01}|keyRPT8={keyRPT11=08|keyRPT19=01}"; 

complementaryInformation = complementaryInformation.replaceAll("keyRPT11=08|keyRPT19=01","keyRPT11=08|keyRPT19=2"); 

的replaceAll给予我意想不到的输出

keyRPT1={keyRPT11=01|keyRPT11=08|keyRPT19=2}|keyRPT3={keyRPT11=03|keyRPT11=08|keyRPT19=2|keyRPT8={keyRPT11=08|keyRPT19=2|keyRPT11=08|keyRPT19=2} 

当我使用替换法的话,我会得到正确的输出

keyRPT1={keyRPT11=01|keyRPT19=01}|keyRPT3={keyRPT11=03|keyRPT19=01}|keyRPT8={keyRPT11=08|keyRPT19=2} 

任何想法的家伙?

回答

3

您需要转义|符号,它在正则表达式中有特殊的含义。

complementaryInformation = complementaryInformation.replaceAll("keyRPT11=08\\|keyRPT19=01","keyRPT11=08|keyRPT19=2"); 

replaceAll()方法将正则表达式模式作为第一个参数。 replace()方法不会将regex作为参数。

+0

但同样的工作,当我打电话替换方法。为什么是这样? –

+3

@MahendraAthneria:见Rubrick的回答。 'replace'不使用正则表达式。如果您对两种方法行为不同的原因感到困惑,请先参阅文档**。 –

+1

@Mahendra:'replaceAll()'方法将正则表达式作为第一个参数。 'replace()'方法不会将regex作为参数。 –

0

String.replaceAll()需要一个正则表达式,而String.replace()需要一个文字。

+0

感谢@Rubrick –