Почему в коде ниже, число 12 не заменяется? Неправильно составлено регулярное выражение или дело в чем-то еще?
public static void main(String[] args) {
StringBuilder str = new StringBuilder("это 1 бакс, а это - 12.");
Pattern pattern = Pattern.compile("\\b1[0-2]\\b|\\b[0-9]\\b");
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
str.replace(matcher.start(), matcher.end(), "rere");
System.out.println(str);
}
}
Ответы (2 шт):
Автор решения: Artem Berezovski
→ Ссылка
Вы ищите вхождения в строке и в тоже время изменяете исходную строку - она увеличивается в размере, но размер, захваченный Matcher'ом остаётся тот, который был у первоначальной строки => метод find() находит всё корректно, но из-за ограничения по размеру не может захватить "2".
Автор решения: AlekseiGaile
→ Ссылка
public static void main(String[] args) throws IOException {
StringBuilder str = new StringBuilder("это 1 бакс, а это - 12.");
Pattern pattern = Pattern.compile("\\b1[0-2]\\b|\\b[0-9]\\b");
Matcher matcher = pattern.matcher(str);
String result = matcher.replaceAll("rere");
System.out.println(result);
}