1. ホーム
  2. java

[解決済み] matcherのgroupメソッド使用時に "No match Found "と表示される。

2022-02-17 13:09:37

質問

私は 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
Exception in thread "Thread-0" java.lang.IllegalStateException: No match found
 at java.util.regex.Matcher.group(Unknown Source)
 at cs236369.proxy.Response.<init>(Response.java:27)
 at cs236369.proxy.ProxyServer.start(ProxyServer.java:71)
 at tests.Hw3Tests$1.run(Hw3Tests.java:29)
 at java.lang.Thread.run(Unknown Source)

解決方法は?

pattern.matcher(input) は常に新しいマッチャーを作成します。 matches() を再度実行します。

試してみてください。

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