使用匹配器组方法时“找不到匹配”

我使用Pattern / Matcher来获取HTTP响应中的响应代码。 groupCount返回1,但是当我试图获取它的时候,我得到一个exception! 任何想法为什么?

代码如下:

 //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

真正

1

线程“Thread-0”中的exceptionjava.lang.IllegalStateException:未find匹配项

在java.util.regex.Matcher.group(Unknown Source)

在cs236369.proxy.Response。(Response.java:27)

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

在tests.Hw3Tests $ 1.run(Hw3Tests.java:29)

在java.lang.Thread.run(Unknown Source)

pattern.matcher(input)总是创build一个新的匹配器,所以你需要再次调用matches()

尝试:

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

你一直在覆盖你使用的比赛

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

每行创build一个新的Matcher对象。

你该走了

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