我正在尝试编写一个循环,它将在输入字符串中找到“$ {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并重新编译了我的代码)现在它不再被打破了,所以我想我必须在那个部门搞砸了。
答案 0 :(得分:1)
根据我的问题的最新更新,重新启动IntelliJ并重新编译我的代码修复的东西。