1

現在、クラスのreplaceAllメソッドは、メソッドStringとともにMatcher.replaceAll引数を正規表現として評価します。

私が抱えている問題は、これらのメソッドのいずれかに渡す置換文字列にドル記号が含まれていることです (もちろん、正規表現では特別な意味があります)。これに対する簡単な回避策は、置換文字列を 'Matcher.quoteReplacement' に渡すことです。これは、リテラル文字を含む文字列を生成するためです。次に、このサニタイズされた文字列を に渡しますreplaceAll

残念ながら、結果の文字列が後で正規表現が必要な操作で使用されるため、特殊文字を保持する必要があるため、上記のことはできません。すべての特殊文字をエスケープすると、その契約が破られます。

誰かが私がやりたいことを達成する方法を提案できますか? どうもありがとう。

編集:より明確な説明については、以下のコード例を見つけてください:

String key = "USD";
String value = "$";

String content = "The figure is in USD";
String contentAfterReplacement;

contentAfterReplacement = content.replaceAll(key, value); //will throw an exception  as it will evaluate the $ in 'value' variable as special regex character

contentAfterReplacement = content.replaceAll(key, Matcher.quoteReplacement(value)); //Can't do this as contentAfterReplacement is passed on and later parsed as a regex (Ie, it can't have special characters escaped).
4

1 に答える 1

2

の代わりにString#replaceメソッドを使用しないのはなぜですかreplaceAllreplaceAll正規表現を使用しますがreplace、置換文字列で正規表現を使用しません。

于 2012-08-16T09:25:39.180 に答える