我无法弄清楚为什么下面的代码没有按预期运行
"Hello/You/There".replaceAll("/", "\\/");
Hello\/You\/There
Hello/You/There
我需要向前逃避斜线吗?我不这么认为,但我也违背了我的意愿尝试了以下......没有工作
"Hello/You/There".replaceAll("\\/", "\\/");
最后我意识到我不需要正则表达式,我只能使用以下内容,而不会创建正则表达式
"Hello/You/There".replace("/", "\\/");
但是,我仍然想知道为什么我的第一个例子不起作用。
答案 0 :(得分:74)
问题实际上是你需要在替换字符串中双重转义反斜杠。你看,"\\/"
(我相信你知道)意味着替换字符串是\/
,并且(你可能不知道)替换字符串\/
实际上只是插入{ {1}},因为Java很奇怪,并且在替换字符串中赋予/
特殊含义。 (据说\
将是一个字面上的美元符号,但我认为真正的原因是他们想要与人混淆。其他语言不这样做。)所以你必须写下:
\$
或:
"Hello/You/There".replaceAll("/", "\\\\/");
答案 1 :(得分:1)
以字符串形式显示时需要双重转义。
每当我制作一个新的正则表达式时,我都会使用在线工具进行一系列测试,例如:http://www.regexplanet.com/advanced/java/index.html
该网站允许您输入正则表达式,它将为您转义为字符串,然后您可以针对不同的输入对其进行测试。
答案 2 :(得分:0)