String x = "Welcome to Java World";
System.out.println(x.replaceAll(".*","JAVA"));
Actual Output = "JAVAJAVA" .
Excepted Output = "JAVA".
任何人都可以帮助为什么它会像这样替换。".*" 原始字符串中的所有字符并将其替换为 "JAVA" 。为什么这会返回 "JAVAJAVA" 。
String x = "Welcome to Java World";
System.out.println(x.replaceAll(".*","JAVA"));
Actual Output = "JAVAJAVA" .
Excepted Output = "JAVA".
任何人都可以帮助为什么它会像这样替换。".*" 原始字符串中的所有字符并将其替换为 "JAVA" 。为什么这会返回 "JAVAJAVA" 。
您的正则表达式可以匹配 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"
,不会替换字符串的空端。
你不需要replaceAll
你的使命。完全相同的语义是通过简单地陈述来实现的
System.out.println("JAVA");
由于String
在 Java 中是不可变的,因此您无法避免获取新对象。
为什么使用“replaceAll”而不是“=”?字符串在java中是不可变的
您还可以使用以下格式 x.replaceAll(".*\z", "JAVA");
因为 .* 将匹配到字符串结尾之前,而 \z 将匹配字符串字符的结尾。