System.out.println("R.A.F. stands for R.A.F. blablabla".replaceAll(
"\bR\.A\.F\.\b", "royal airforce army"));
我想用"皇家空军"替换字符串中的第二个 R.A.F,为什么它不起作用?
单词边界匹配以下任何点:
- 前一个字符是单词字符,下一个字符不是(或字符串的末尾)
或 - 下一个字符是单词字符,而前一个字符不是(或字符串的开头)。
由于.
不是单词字符,因此模式.b
将只匹配后跟单词字符的.
,即它将匹配R.A.F.foo
,但不匹配R.A.F. foo
。
如果要确保它与紧跟单词字符R.A.F.
不匹配,请改用以下内容:
"\bR\.A\.F\.(?!\w)"
但这将替换示例输入中的两个实例,因为第一个R.A.F
前面是字符串的开头。如果你只是想替换第二个,我建议使用这样的东西:
"(?<=\W)R\.A\.F\.(?!\w)"
我会尝试:
System.out.println("R.A.F. stands for R.A.F. blablabla".replaceAll(
"\sR\.A\.F\.", " royal airforce army"));
输出:
R.A.F. stands for royal airforce army blablabla
附注:注意我在"皇家空军"之前添加了一个空格。