【问题标题】:How does string.replaceAll() work?string.replaceAll() 是如何工作的?
【发布时间】:2014-02-17 03:52:18
【问题描述】:

我正在制作一个替换字符串特定部分的程序。

String x = "hello";
x=x.replaceAll("e","\\\\s");
System.out.println(x);

输出:h\sllo

但对于

System.out.println("\\s");

输出:\s

为什么我们在第一种情况下需要额外的转义字符。

【问题讨论】:

    标签: java regex string replaceall


    【解决方案1】:
    • 您需要 \\ 来表示正则表达式中的单个 \ 字符
    • 但 Java 字符串也可以解释反斜杠,因此您需要为 String 转义每个 \,因此您需要 2+2=4 个反斜杠来匹配单个 \(2 个用于 String,2 个用于正则表达式引擎)
    • 另请注意,由于可能存在反向引用,正则表达式引擎也会解释 String#replaceAll 方法的第二个参数,这也是相同的正则表达式规则也适用于替换字符串的原因。
    • 您的正则表达式正在使用文字 \ 后跟文字 s 的替换字符串

    【讨论】:

    • -1。更仔细地阅读问题。他说的不是正则表达式,而是替换字符串。
    • @AlanMoore:对不起,我写的是matching 而不是replacing(现已修复),但我在回答之前确实阅读了这个问题。
    • 我的意思是你说的是第二个参数。这不是正则表达式,但它要求您出于另一个原因转义反斜杠。
    • 是的,正则表达式引擎也解释了第二个参数,因为可能存在反向引用,并且相同的正则表达式规则适用于替换字符串。 (也许我应该在我的答案中清楚地添加这一行)。
    • 这与正则表达式引擎无关,这就是我的意思。在替换字符串中唯一具有特殊含义的其他字符是美元符号,它的特殊性与它在正则表达式中的用法无关。也许我只是有SWOTI Syndrome 的爆发,但我认为重要的是要理解处理替换字符串的代码完全独立于解析正则表达式字符串的例程。
    猜你喜欢
    • 1970-01-01
    • 2011-09-09
    • 2013-05-30
    • 2011-09-23
    • 1970-01-01
    • 2017-07-24
    • 2016-11-13
    • 2017-10-11
    • 2021-10-13
    相关资源
    最近更新 更多