diff --git a/src/java.base/share/classes/java/util/regex/Matcher.java b/src/java.base/share/classes/java/util/regex/Matcher.java index 8862e02b190..97a38a33d8c 100644 --- a/src/java.base/share/classes/java/util/regex/Matcher.java +++ b/src/java.base/share/classes/java/util/regex/Matcher.java @@ -1070,10 +1070,11 @@ public final class Matcher implements MatchResult { throw new IllegalArgumentException( "capturing group name {" + gname + "} starts with digit character"); - if (!namedGroups().containsKey(gname)) + Integer number = namedGroups().get(gname); + if (number == null) throw new IllegalArgumentException( "No group with name {" + gname + "}"); - refNum = namedGroups().get(gname); + refNum = number; cursor++; } else { // The first number is always a group @@ -1805,9 +1806,10 @@ public final class Matcher implements MatchResult { int getMatchedGroupIndex(String name) { Objects.requireNonNull(name, "Group name"); checkMatch(); - if (!namedGroups().containsKey(name)) + Integer number = namedGroups().get(name); + if (number == null) throw new IllegalArgumentException("No group with name <" + name + ">"); - return namedGroups().get(name); + return number; } private void checkGroup(int group) { diff --git a/src/java.base/share/classes/java/util/regex/Pattern.java b/src/java.base/share/classes/java/util/regex/Pattern.java index 5a365a40c9f..45c48ddab54 100644 --- a/src/java.base/share/classes/java/util/regex/Pattern.java +++ b/src/java.base/share/classes/java/util/regex/Pattern.java @@ -2712,14 +2712,15 @@ loop: for(int x=0, offset=0; x does not exist"); if (create) { hasGroupRef = true; if (has(CASE_INSENSITIVE)) - root = new CIBackRef(namedGroupsMap().get(name), has(UNICODE_CASE)); + root = new CIBackRef(number, has(UNICODE_CASE)); else - root = new BackRef(namedGroupsMap().get(name)); + root = new BackRef(number); } return -1; case 'l':