为什么Mattcher在成功查找后会抛出异常

时间:2013-12-16 17:51:53

标签: java regex

我正在尝试编写一个循环,它将在输入字符串中找到“$ {arbitraryTextHere}”的所有实例。例如:

  

someText $ {findMe} moreText $ {findMeToo} EvenMoreText $ {DontForgetMe}

这是我的代码:

    Pattern placeholderPattern = Pattern.compile("\\$\\{[\\w|\\d]+\\}");
    Matcher placeholderMatcher = placeholderPattern.matcher(templateString);

    int workingIndex = 0;
    while(placeholderMatcher.find()){
        workingIndex = placeholderMatcher.start();
    }

注意:我正在测试的模板字符串是S"omeString ${someProp}"

奇怪的是.find()必须返回true才能进入循环,但是.start()会抛出IllegalStateException。这很奇怪的原因是,如果匹配器的内部.start()变量小于0,first仅抛出IllegalStateException,而.find()通过匹配器的boolean search(int from)方法抛出IllegalStateException,将确保first为零或更大,除非未找到匹配项,但如果未找到匹配项,则.find()将返回false,并且我们不会在循环体中结束。

那到底是怎么回事?

更新:所以我将上面的代码封装起来,以便它在一个单元测试中运行,然后就可以了。所以我认为这个问题与在类中测试方法从单元测试中调用有关。但那有点奇怪。我将更深入地研究问题的这个方面,然后发布更新。

更新:好的,我尝试再次关闭它(我重新启动了我的IntelliJ并重新编译了我的代码)现在它不再被打破了,所以我想我必须在那个部门搞砸了。

1 个答案:

答案 0 :(得分:1)

根据我的问题的最新更新,重新启动IntelliJ并重新编译我的代码修复的东西。