我不明白为什么"$"很特别.
String str = "bla aa";
String tag = "$";
str = str.replaceFirst("aa", tag);
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
Run Code Online (Sandbox Code Playgroud)
如果我更改tag ="\\ $",那么它可以正常工作.但为什么需要逃脱呢?提前致谢.
因为它是一个特殊的正则表达式符号(结果是关于捕获组),并且replaceFirst采用正则表达式参数.文档明确警告您:
请注意,替换字符串中的反斜杠()和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同; 请参阅Matcher.replaceFirst(java.lang.String).如果需要,使用Matcher.quoteReplacement(java.lang.String)来抑制这些字符的特殊含义.
现在再说一点$.在正则表达式模式中,它意味着"行尾".
在替换字符串中,$g表示"第g组".因此对于正则表达式a([a-z]+)([0-9]+),您有两个组 - $1并且$2,您可以在替换时引用它们.请参阅此处的说明