반응형
matcher의 그룹 방법을 사용할 때 "일치하지 않음"
HTTP 응답에서 응답 코드를 얻기 위해 Pattern
/ Matcher
를 사용 하고 있습니다. 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
...
사용하여 얻은 일치 항목을 지속적으로 덮어 쓰고 있습니다.
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());
참조 URL : https://stackoverflow.com/questions/5674268/no-match-found-when-using-matchers-group-method
반응형
'IT이야기' 카테고리의 다른 글
PHP에서 강제로 메모리 해제 (0) | 2021.04.10 |
---|---|
동일한 신호에 대한 여러 bash 트랩 (0) | 2021.04.10 |
잘못된 지연 초기화 (0) | 2021.04.10 |
Xcode가 내 앱을 컴파일하지만 시뮬레이터에서 실행할 수 없습니다. (0) | 2021.04.09 |
JavaDoc에서 재정의 된 메서드 (0) | 2021.04.09 |