替换为“$”时replaceFirst()失败

时间:2011-06-01 21:39:15

标签: java regex string

我不明白为什么“$”很特别。

String str = "bla aa";
String tag = "$";
str = str.replaceFirst("aa", tag);

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1

如果我更改tag =“\\ $”,那么它可以正常工作。但为什么需要逃脱呢?提前谢谢。

3 个答案:

答案 0 :(得分:6)

因为它是一个特殊的正则表达式符号(结果是关于捕获组),replaceFirst采用正则表达式参数。文档明确警告你:

  

请注意,替换字符串中的反斜杠()和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同;请参阅Matcher.replaceFirst(java.lang.String)。如果需要,使用Matcher.quoteReplacement(java.lang.String)来抑制这些字符的特殊含义。

现在更多关于$。在正则表达式模式中,它意味着“行尾” 在替换字符串中,$g表示“ g th group”。因此,对于正则表达式a([a-z]+)([0-9]+),您有两个组 - $1$2,您可以在替换时引用它们。请参阅explanation here

答案 1 :(得分:0)

替换首先采用正则表达式。根据{{​​3}} $匹配行的结尾。

答案 2 :(得分:0)

$匹配正则表达式中行的结尾。因此,如果你需要它作为一个简单的角色,你需要逃避它。您可以在JAVA Pattern

找到更多信息