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。

扫描仪使用1024个字符的内部缓冲区。改用模式:

扫描仪使用1024个字符的内部缓冲区。改用模式:

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