Pattern regexp = Pattern.compile(".*");
Matcher matcher = regexp.matcher("ABC_012");
matcher.matches();
System.out.println(matcher.group(0));
System.out.println(matcher.replaceAll("$0_suffix"));
То же самое происходит и здесь:
ABC_012
ABC_012_suffix_suffix
Причина скрыта в методе replaceAll
: он пытается find
всех подпоследовательностей, которые соответствуют шаблону:
while (matcher.find()) {
System.out.printf("Start: %s, End: %s%n", matcher.start(), matcher.end());
}
Это приведет к:
Start: 0, End: 7
Start: 7, End: 7
Таким образом, к нашему первому удивлению, сопоставитель находит две подпоследовательности "ABC_012"
и другую ""
.И он добавляет "_suffix"
к ним обоим:
"ABC_012" + "_suffix" + "" + "_suffix"