--- old/src/java.base/share/classes/java/util/regex/Matcher.java 2018-04-24 14:34:52.957200286 -0700 +++ new/src/java.base/share/classes/java/util/regex/Matcher.java 2018-04-24 14:34:52.484157424 -0700 @@ -993,6 +993,7 @@ public Matcher appendReplacement(StringBuilder sb, String replacement) { // If no match, return error if (first < 0) + throw new IllegalStateException("No match available"); StringBuilder result = new StringBuilder(); appendExpandedReplacement(replacement, result); @@ -1178,10 +1179,12 @@ if (result) { StringBuilder sb = new StringBuilder(); do { - appendReplacement(sb, replacement); + sb.append(text, lastAppendPosition, first); + appendExpandedReplacement(replacement, sb); + lastAppendPosition = last; result = find(); } while (result); - appendTail(sb); + sb.append(text, lastAppendPosition, getTextLength()); return sb.toString(); } return text.toString(); @@ -1404,8 +1407,9 @@ if (!find()) return text.toString(); StringBuilder sb = new StringBuilder(); - appendReplacement(sb, replacement); - appendTail(sb); + sb.append(text, 0, first); + appendExpandedReplacement(replacement, sb); + sb.append(text, last, getTextLength()); return sb.toString(); }