为什么string.replaceAll行为不端

时间:2014-07-24 15:55:30

标签: java string

我一直使用string.replaceAll()没有任何问题。

但现在我只是难倒......

这是我的代码

public static String getVersionName() {
    String versionName = null;
    versionName = "v"+packageInfo.versionName;
    versionName = versionName.replaceAll(".","_");
    return versionName;
}
在replaceAll v1.0.4

之前的

versionName

预期结果为v1_0_4 实际结果为v_________ 它因某种原因而有所不同,并且绝不是预期的结果。

为什么会这样?我该如何解决?

3 个答案:

答案 0 :(得分:3)

这是因为replaceAll使用正则表达式。

你需要逃避“。”使用“\\。”

答案 1 :(得分:1)

这是因为replaceAll期望正则表达式。您应该使用replace代替(它仍然替换所有出现的内容),因为您只想匹配单个字符。

因此,在v1.0.4上使用versionName = versionName.replace('.','_');将为您提供v1_0_4。

答案 2 :(得分:1)

replaceAll()使用正则表达式,其中.匹配任何字符

您的选择是逃避.所以它只是意味着"。"再次使用\\.

或者,如果你不需要正则表达式(在这种情况下你不是这样),你应该使用replace()代替,这会更快,你现在不会要解决的两个问题

versionName = versionName.replace(".","_");