String.replaceAll() 替换所有字符而不仅仅是正则表达式。 - Java

问题描述 投票:0回答:2

我正在尝试获取传入连接的 IP 地址,然后将其存储在 YML 文件(SnakeYML API)中。 我已收到 IP 地址,并且我使用正确返回“127.0.0.1”的传入本地连接进行了测试。

但是,当我在其上运行此方法时:

address.replaceAll(".", "-");

返回是这样的:“---------” (我必须替换句点,因为 SnakYML 使用句点作为路径分隔符)

这可能是非常愚蠢的事情,但我无法弄清楚。

java replaceall
2个回答
6
投票

您需要使用

"\\."
而不是
"."
。 原因是
.
是匹配任何字符的正则表达式。 所以你需要转义它以使其仅匹配实际的点 - 写
address.replaceAll("\\.", "-");

另一种方法是使用

replace
方法代替
replaceAll
,它按字面解释其参数,而不是解释为正则表达式。 所以
address.replace(".", "-");
会做你想做的事。


2
投票

replaceAll
使用正则表达式,在正则表达式中
.
代表任何字符(行分隔符除外),因此您需要转义
.
,例如通过
"\\."
"[.]"
(一个元素字符类)。

但是更清晰、可能更快的方法是使用

replace(char, char)

address = address.replace('.', '-');

不使用正则表达式引擎。

您还可以使用

replace(CharSequence target, CharSequence replacement)
它将自动转义两个参数中的所有正则表达式元字符(是的,
replacement
也可以有一些可由正则表达式引擎使用的特殊字符)。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.