在java中匹配,matcher在while循环中的行为?

时间:2016-09-30 17:34:29

标签: java while-loop matcher

我正在读一个具有这种模式的文件:<paper-dropdown-menu> <paper-listbox attr-for-selected="data-order" selected="1" class="dropdown-content"> <paper-item data-order="0">First</paper-item> <paper-item data-order="1">Second</paper-item> <paper-item data-order="2">Third</paper-item> </paper-listbox> </paper-dropdown-menu> 但是格式不能保证,这意味着我必须处理一些情况,例如在一行上的一个部分,一行上有许多部分。而且我还需要存储每个令牌的偏移量。所以我使用Matcher运行这样的代码,因为它提供了偏移和标记:

(section1, section2, section3) ...

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

我也进行了一些测试:

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

它也会输出错误信息。为什么呢?!

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

1 个答案:

答案 0 :(得分:0)

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

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