2012-09-13 4 views
1

큰 문자열에서 주어진 정규 표현식의 모든 항목을 검색하기 위해 java.util.Scanner를 사용하고 있습니다.Java java.util.regex.MatchResult 스캐너의 카운터 문제

Scanner sc = new Scanner(body); 
sc.useDelimiter(""); 
String match = ""; 
while(match!=null) 
{ 
    match = sc.findWithinHorizon(pattern, 0); 
    if(match==null)break; 
    MatchResult mr = sc.match(); 
    System.out.println("Match string: "+mr.group()); 
    System.out.println("Match string using indexes: "+body.substring(mr.start(),mr.end()); 
} 

이상한 것은 검사의 특정 숫자 후, 그룹() 메소드가 정확한 발생을 반환하는 동안 시작()과 end() 스캔이의 처음부터 다시 시작과 같은 방법이 잘못된 인덱스를 반환 파일. 정규식은 여러 줄입니다 (이 정규식을 사용하여 "\ r \ n | [\ n \ r \ u2028 \ u2029 \ u0085]"행 변경을 찾습니다).

힌트가 있습니까? 그것은 "수평선"매개 변수 (그 값에 대한 differend 조합을 시도했습니다)와 관련이있을 수 있을까요?

자세한 내용은 파일의 크기 (1000 자 이상), 0에서 카운터 재시작 (예 : 1003 : 1020이 3 : 120이 된 첫 번째 잘못된 색인 발생)과 관련이있는 것으로 보입니다.

답변

4

Scanner1024 문자의 내부 버퍼를 사용합니다. 대신 Pattern을 사용하십시오.

Matcher matcher = Pattern.compile(...).matcher(body); 
while(matcher.find()) { 
    int start = matcher.start(); 
} 
+0

감사합니다. –

관련 문제