1

目前,类的replaceAll方法String以及Matcher.replaceAll方法将它们的参数评估为正则表达式。

我遇到的问题是我传递给这两种方法的替换字符串包含一个美元符号(这在正则表达式中当然具有特殊含义)。一个简单的解决方法是将我的替换字符串传递给“Matcher.quoteReplacement”,因为这会产生一个带有文字字符的字符串,然后将这个经过清理的字符串传递给replaceAll.

不幸的是,我不能执行上述操作,因为我需要保留特殊字符,因为生成的字符串稍后将用于需要 reg ex 的操作中,如果我已经转义了所有特殊字符,这将破坏该合同。

有人可以建议我可以实现我想做的事情吗?非常感谢。

编辑:为了更清楚的解释,请在下面找到代码示例:

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方法而不是replaceAll. replaceAll使用正则表达式但replace不在替换字符串中使用正则表达式。

于 2012-08-16T09:25:39.180 回答