所以我只是遇到了一个很好的边缘情况,replaceAll如果替换String中有一个$或\,那么对一个字符串进行操作就会阻塞.
为什么替换字符串不只是替换为我指定的正则表达式的匹配?我在这里对正则表达式的理解是什么?
从Oracle Java 7文档引用:
public String replaceAll(String replacement)
将具有给定替换字符串的模式匹配的输入序列的每个子序列替换.
此方法首先重置此匹配器.然后它扫描输入序列以查找模式的匹配.不属于任何匹配项的字符将直接附加到结果字符串; 结果中的每个匹配都被替换字符串替换.替换字符串可能包含对appendReplacement方法中捕获的子序列的引用.
请注意,替换字符串中的反斜杠(\)和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同.如上所述,美元符号可被视为对捕获的子序列的引用,反斜杠用于替换替换字符串中的文字字符.
美元符号是一个特殊的字符; 你必须逃脱它:
"\\$"
Run Code Online (Sandbox Code Playgroud)
注意双反斜杠 - 这是你在java中编写单个反斜杠的方式,这意味着\$传递给replace方法.
美元符号表示对捕获组的后向引用:
"$1" // replace with group 1
"$2" // replace with group 2
Run Code Online (Sandbox Code Playgroud)
还有一个特殊的第0组:
"$0" // replace with the entire match
Run Code Online (Sandbox Code Playgroud)