Подтвердить что ты не робот

"Нет совпадения найдено" при использовании метода групповой группы

Я использую Pattern/Matcher, чтобы получить код ответа в ответе HTTP. groupCount возвращает 1, но я получаю исключение, пытаясь его получить! Любая идея почему?

Здесь код:

//get response code
String firstHeader = reader.readLine();
Pattern responseCodePattern = Pattern.compile("^HTTP/1\\.1 (\\d+) OK$");
System.out.println(firstHeader);
System.out.println(responseCodePattern.matcher(firstHeader).matches());
System.out.println(responseCodePattern.matcher(firstHeader).groupCount());
System.out.println(responseCodePattern.matcher(firstHeader).group(0));
System.out.println(responseCodePattern.matcher(firstHeader).group(1));
responseCode = Integer.parseInt(responseCodePattern.matcher(firstHeader).group(1));

И вот вывод:

HTTP/1.1 200 OK

True

1

Исключение в потоке "Thread-0" java.lang.IllegalStateException: Не найдено совпадений

в java.util.regex.Matcher.group(Неизвестный источник)

в cs236369.proxy.Response. (Response.java:27)

в cs236369.proxy.ProxyServer.start(ProxyServer.java:71)

в тестах. Hw3Tests $1.run(Hw3Tests.java:29)

в java.lang.Thread.run(Неизвестный источник)

4b9b3361

Ответ 1

pattern.matcher(input) всегда создает новый соединитель, поэтому вам нужно будет снова вызвать matches().

Try:

Matcher m = responseCodePattern.matcher(firstHeader);
m.matches();
m.groupCount();
m.group(0); //must call matches() first
...

Ответ 2

Вы постоянно переписываете полученные вами матчи с помощью

System.out.println(responseCodePattern.matcher(firstHeader).matches());
System.out.println(responseCodePattern.matcher(firstHeader).groupCount());

Каждая строка создает новый объект Matcher.

Вы должны пойти

Matcher matcher = responseCodePattern.matcher(firstHeader);
System.out.println(matcher.matches());
System.out.println(matcher.groupCount());