使用匹配器组方法时“找不到匹配”
我使用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());