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