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

时间:2015-01-25 19:04:10

标签: java replaceall

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

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

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

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

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

2 个答案:

答案 0 :(得分:5)

您需要使用"\\."代替"."。原因是.是一个匹配任何字符的正则表达式。因此,您需要将其转义为仅匹配实际点 - 写入address.replaceAll("\\.", "-");

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

答案 1 :(得分:1)

replaceAll使用正则表达式,正则表达式.表示任何字符(行分隔符除外),因此您需要转义.,例如通过{{1} }或"\\."(一个元素character class)。

但更清晰,可能更快的方法是使用"[.]"之类的

replace(char, char)

它不使用正则表达式引擎。

你也可以使用address = address.replace('.', '-'); 来自两个参数的所有正则表达式字符串(是的,replace(CharSequence target, CharSequence replacement)也可以有一些特殊字符,可以被正则表达式引擎使用)。