1

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}

replaceメソッドを使用している場合、正しい出力が得られます

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

アイデアの人は?

4

2 に答える 2

3

|正規表現で特別な意味を持つ記号をエスケープする必要があります。

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

replaceAll()メソッドは、最初のパラメーターとして正規表現パターンを取ります。replace()メソッドは、パラメーターとして正規表現を取りません。

于 2011-10-14T11:05:38.467 に答える
0

String.replaceAll()は正規表現を取りますが、String.replace()はリテラルを取ります。

于 2011-10-14T11:07:41.747 に答える