Java 为什么string.replaceAll行为不正常

Java 为什么string.replaceAll行为不正常,java,string,Java,String,我一直使用string.replaceAll(),没有任何问题 但现在我被难倒了 这是我的密码 public static String getVersionName() { String versionName = null; versionName = "v"+packageInfo.versionName; versionName = versionName.replaceAll(".","_"); return versionName; } replac

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

但现在我被难倒了

这是我的密码

public static String getVersionName() {
    String versionName = null;
    versionName = "v"+packageInfo.versionName;
    versionName = versionName.replaceAll(".","_");
    return versionName;
}
replaceAll之前的版本名为
v1.0.4

预期结果为
v1\u 0\u 4
实际结果是
v\uuuuuuuuuu
\uuuuuuuuuuuuu
它因某些原因而变化,而且永远不是预期的结果


为什么会这样?如何修复它?

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


您需要使用“\\”来转义“.”

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


您需要使用“\\”来转义“.”

这是因为
replaceAll
需要一个正则表达式。您可能应该改用
replace
(它仍然会替换所有出现的字符),因为您只想匹配单个字符


因此,使用
versionName=versionName.replace('.','')将为您提供v1\u 0\u 4作为结果。

这是因为
replaceAll
需要一个正则表达式。您可能应该改用
replace
(它仍然会替换所有出现的字符),因为您只想匹配单个字符

因此,使用
versionName=versionName.replace('.','')将为您提供v1\u 0\u 4。

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

您可以选择转义
,因此它的意思是“再次使用
\\。

或者,如果您不需要正则表达式(在本例中不需要),则应该使用
replace()
,这样会更快,而且现在不会有两个问题需要解决

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

您可以选择转义
,因此它的意思是“再次使用
\\。

或者,如果您不需要正则表达式(在本例中不需要),则应该使用
replace()
,这样会更快,而且现在不会有两个问题需要解决


我想换2个characters@LenaBru它仍然会替换该字符的每一次出现,它只使用一个字符作为它试图替换的对象。我想替换2characters@LenaBru它仍然会替换该字符的每一次出现,它只使用一个字符作为它试图替换的对象。
versionName = versionName.replace(".","_");