问题描述
我正在使用 Pattern/Matcher 来获取 HTTP 响应中的响应代码.groupCount 返回 1,但尝试获取时出现异常!知道为什么吗?
I'm using Pattern/Matcher to get the response code in an HTTP response. groupCount returns 1, but I get an exception when trying to get it! Any idea why?
代码如下:
//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() 再次.
pattern.matcher(input) always creates a new matcher, so you'd need to call matches() again.
试试:
Matcher m = responseCodePattern.matcher(firstHeader); m.matches(); m.groupCount(); m.group(0); //must call matches() first ...