gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:42:45 26 4
gpt4 key购买 nike

我正在使用 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 字符的内部缓冲区。使用 Pattern 代替:

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

关于Java java.util.regex.MatchResult 计数器问题与扫描仪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12401936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com