2014-12-11 4 views
1

간단한 정규식 일치를 수행하려고하지만 IllegalStateException을 계속 실행하려고합니다. 동일한 문제로 비슷한 질문을 한 번 보았습니다. group()을 사용하기 전에 find() 또는 matches()를 먼저 호출해야합니다. 문제는 내가 이미 그렇게하고 있지만 여전히 똑같은 예외가 발생하고 있다는 것입니다.Java 정규 표현식을 사용하는 IllegalStateException

java.lang.IllegalStateException: No match found 
    at java.util.regex.Matcher.group(Unknown Source) 
    at RegexThing.<init>(RegexThing.java:24) 
    at Test.main(Test.java:14) 
+1

무엇이 문제입니까? 메시지는 "No match found"이므로 m.group (0)은 존재하지 않습니다. –

답변

3

당신은 호출해서는 안 Matcher#matchesMatcher#find 다음 :

try 
    { 
     Pattern p = Pattern.compile(strPattern); 
     Matcher m = p.matcher(strInput); 

     m.matches(); 
     m.find(); 
     System.out.println(m.groupCount()); //returns 9 groups 
     System.out.println(m.group(0)); //will crash here 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

는 여기에 내가이에게서 얻는 예외입니다. 첫 번째 방법은 전체 입력을 패턴과 일치 시키려고합니다. find이 다음에 실행되면 패턴과 일치하는 다음 하위 문자열을 일치 시키려고 시도하지만 이전의 matches이 전체 입력을 포함하기 때문에 일치하는 패턴을 찾지 못합니다.

전체 입력 (matches) 또는 패턴 (find)과 일치하는 첫 번째 하위 시퀀스를 일치시킬 것인지 여부에 따라 간단히 하나를 호출하십시오.

는 또한 일치하는 항목이있는 경우에만 일치하는 그룹을 인쇄해야합니다 :

if(m.find()) { 
    System.out.println(m.groupCount()); //returns 9 groups 
    System.out.println(m.group(0)); //will crash here 
} 
1

groupCount는 캡처 그룹의 수를 반환합니다. 패턴 일치 여부에 대해서는 아무 것도 말하지 않습니다. 그래서 당신은 항상 9 개의 그룹을 얻을 것입니다. 그러나 m.group (0)은 패턴이 일치하지 않으므로 예외를 throw합니다.

+0

궁금합니다. 내가 여기서 말한 것과 무슨 문제가 있니? –

관련 문제