【发布时间】:2020-03-23 20:47:27
【问题描述】:
当给定的正则表达式为“.*”时,Java 8 的 String.replaceAll(regexStr, replacementStr) 不起作用。结果是replacementStr 的两倍。例如:
String regexStr = ".*";
String replacementStr = "REPLACEMENT"
String initialStr = "hello";
String finalStr = initialStr.replaceAll(regexStr, replacementStr);
// Expected Result: finalStr == "REPLACEMENT"
// Actual Result: finalStr == "REPLACEMENTREPLACEMENT"
我知道当正则表达式为“.*”时使用 replaceAll() 并不完全有意义,但正则表达式不是硬编码的,可能是其他正则表达式字符串。为什么这不起作用?它是 Java 8 中的错误吗?
【问题讨论】:
-
.*is supposed to match twice。这就是正则表达式的工作原理。 -
.*匹配末尾的空字符串。请改用.+。 -
我也想编辑空字符串。
-
如果您不想保留原始字符串,为什么要使用替换?只需完全丢弃您的原始字符串并使用替换。
-
只需使用
replaceFirst而不是replaceAll。