我正在尝试获取传入连接的 IP 地址,然后将其存储在 YML 文件(SnakeYML API)中。 我已收到 IP 地址,并且我使用正确返回“127.0.0.1”的传入本地连接进行了测试。
但是,当我在其上运行此方法时:
address.replaceAll(".", "-");
返回是这样的:“---------” (我必须替换句点,因为 SnakYML 使用句点作为路径分隔符)
这可能是非常愚蠢的事情,但我无法弄清楚。
您需要使用
"\\."
而不是 "."
。 原因是.
是匹配任何字符的正则表达式。 所以你需要转义它以使其仅匹配实际的点 - 写 address.replaceAll("\\.", "-");
。
另一种方法是使用
replace
方法代替 replaceAll
,它按字面解释其参数,而不是解释为正则表达式。 所以address.replace(".", "-");
会做你想做的事。
replaceAll
使用正则表达式,在正则表达式中.
代表任何字符(行分隔符除外),因此您需要转义.
,例如通过"\\."
或"[.]"
(一个元素字符类)。
但是更清晰、可能更快的方法是使用
replace(char, char)
像
address = address.replace('.', '-');
不使用正则表达式引擎。
您还可以使用
replace(CharSequence target, CharSequence replacement)
它将自动转义两个参数中的所有正则表达式元字符(是的,replacement
也可以有一些可由正则表达式引擎使用的特殊字符)。