8
String x = "Welcome to Java World";
System.out.println(x.replaceAll(".*","JAVA"));
Actual Output = "JAVAJAVA" .
Excepted Output = "JAVA".

任何人都可以帮助为什么它会像这样替换。".*" 原始字符串中的所有字符并将其替换为 "JAVA" 。为什么这会返回 "JAVAJAVA" 。

4

4 回答 4

15

您的正则表达式可以匹配 0 到所有字符。首先,它匹配整个 string "Welcome to Java World",然后匹配 string 的结尾"",将两者都替换为"JAVA"

为了使这项工作按您的预期工作,您有几个选择。

String x = "Welcome to Java World";
System.out.println(x.replaceAll(".+","JAVA"));

注意 + 而不是 *,这意味着 1 或多个,所以结尾不会匹配。

或者

String x = "Welcome to Java World";
System.out.println(x.replaceFirst(".*","JAVA"));

这只会用 替换整个字符串"JAVA",不会替换字符串的空端。

于 2012-05-04T13:03:44.997 回答
1

你不需要replaceAll你的使命。完全相同的语义是通过简单地陈述来实现的

System.out.println("JAVA");

由于String在 Java 中是不可变的,因此您无法避免获取新对象。

于 2012-05-04T13:06:16.123 回答
1

为什么使用“replaceAll”而不是“=”?字符串在java中是不可变的

于 2012-05-04T13:07:43.917 回答
1

您还可以使用以下格式 x.replaceAll(".*\z", "JAVA");

因为 .* 将匹配到字符串结尾之前,而 \z 将匹配字符串字符的结尾。

于 2012-05-04T13:22:55.870 回答