Java.util.regex.MatchResult扫描器计数器问题

Java.util.regex.MatchResult扫描器计数器问题,java,java.util.scanner,Java,Java.util.scanner,我使用java.util.Scanner从一个大字符串中扫描给定正则表达式的所有匹配项 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(); Syst

我使用java.util.Scanner从一个大字符串中扫描给定正则表达式的所有匹配项

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());
}
奇怪的是,经过一定数量的扫描后,group()方法返回正确的匹配项,而start()和end()方法返回错误的索引,就像扫描从文件开头重新开始一样。 正则表达式是多行的(我使用这个正则表达式来发现行更改“\r\n |[\n\r\u2028\u2029\u0085]”)

你有什么提示吗?它是否与“地平线”参数有关(我已经尝试了该值的不同组合)


有关更多详细信息,它似乎与文件的维度有关(超过1000个字符),大约1000个字符后,计数器从0重新启动(例如,1003:1020后出现的第一个错误索引变为3:120)。

Scanner
使用具有
1024
个字符的内部缓冲区。改用
模式

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