java replaceAll之$替换

Posted 太白的技术博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java replaceAll之$替换相关的知识,希望对你有一定的参考价值。

最近,在开发一个伪代码翻译工具的过程中,遇到个问题,我们在伪代码中使用spring EL的规则,将非变量限定在${"1"}中,解析后根据上下文的类型转换为相应的java类型。在规则上,我们原先要求op1 op op2之间必须有空格,但是后来发现,有些地方仍然存在着操作符和操作数之间没有空格的情况,为了尽可能多的兼容,我们选择根据上下文进行判断,适当的预处理以便后续解析不会出错,于是需要进行类似下列处理:

lineText.replaceAll("#\\\\+", "# +").replaceAll("\\\\+@", "+ @").replaceAll("\\\\+\\\\$", "+ $")

但是执行的时候报

Exception in thread "main" java.lang.IllegalArgumentException: Illegal group reference: group index is missing
at java.util.regex.Matcher.appendReplacement(Unknown Source)
at java.util.regex.Matcher.replaceAll(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)

经反复检查,replaceAll的第二个参数中也需要转义,如下:

lineText.replaceAll("#\\\\+", "# +").replaceAll("\\\\+@", "+ @").replaceAll("\\\\+\\\\$", "+ \\\\$")

但是,javadoc并没有提到这一点。

 

以上是关于java replaceAll之$替换的主要内容,如果未能解决你的问题,请参考以下文章

浅谈java中replace和replaceAll的区别

浅谈java中replace和replaceAll的区别

Java中replace与replaceAll区别

JAVA中string.replace和string.replaceAll的区别及用法

JAVA中string.replace和string.replaceAll的区别及用法

Java 的replace和replaceAll的使用