我不明白为什么“$”很特别。
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 =“\\ $”,那么它可以正常工作。但为什么需要逃脱呢?提前谢谢。
答案 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
找到更多信息