Почему String.replaceAll (". *", "REPLACEMENT") дает неожиданное поведение в Java 8? - PullRequest
6 голосов
/ 23 марта 2020

Java 8 String.replaceAll (regexStr, replaceStr) не работает, если задано регулярное выражение ". *". Результат - двойная замена Str. Например:

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?

1 Ответ

5 голосов
/ 24 марта 2020
// specify start and end of line

String regexStr = "^.*$";
String replacementStr = "REPLACEMENT"
String initialStr = "hello";
String finalStr = initialStr.replaceAll(regexStr, replacementStr);
...