gpt4 book ai didi

java - java中的匹配器,while循环中的匹配器行为?

转载 作者:太空宇宙 更新时间:2023-11-04 12:11:48 24 4
gpt4 key购买 nike

我正在读取一个具有这种模式的文件:(section1,section2,section3) ...但格式无法保证,这意味着我必须处理诸如单独行上的一个部分、一行上的多个部分之类的情况。我还需要存储每个 token 的偏移量。所以我使用 Matcher 运行这样的代码,因为它提供了偏移量和标记:

`define a global matcher
while() {
readSection1(matcher, other parameters);
readSection2(matcher, other parameters);
readSection3(matcher, other parameters);
}

你可以看到我正在尝试通过这个匹配器,这样我就可以从我停止的地方开始。但现在我有一个问题。在我的最后一个 readSection3 方法结束后,我测试了我的匹配器没有到达末尾,所以我开始了新一轮的阅读。然而,当我再次进入 while 循环并将匹配器传递给我的 readSection1 方法时,匹配器突然结束了!为什么会发生这种情况?

我还进行了一些测试:

String loop = "a b c d e f g h i j k l";
Matcher loopMatcher = Pattern.compile("\\S+").matcher(loop);
boolean loopEnded = false;
while (!loopEnded) {
use(loopMatcher);
if (loopMatcher.hitEnd()) {
loopEnded = true;
}
}

public static void use(Matcher matcher) {
if (!matcher.find()) {
System.out.println("loop not ended but matcher hit end");
}
}

它也会打印错误消息。为什么?!

好吧,奇怪的事情发生了,现在我再次运行这个小程序,错误消失了,但它仍然在我的大程序中。

最佳答案

如果匹配器找到的最后一个字符串位于输入的末尾,则 Matcher.hitEnd() 方法似乎会返回 true。因此,如果文件最后一部分之后有字符,Matcher.hitEnd() 将返回 false,即使它实际上是最后一部分。

但是,我运行了你的测试代码,它没有显示错误消息。您确定您发布的代码与您的测试相同吗?您使用的匹配器不是您首先初始化的匹配器(“loopMatcher”与“matcher”)。

关于java - java中的匹配器,while循环中的匹配器行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39797034/

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