我想使用SWTBotTree.expandNode(final String nodeText,final boolean recursive)函数和一个并不总是完全相同的字符串。字符串的开头相同,但结尾可以不同。我认为它可以通过注册 exp. 解决,例如:"字符串的常量部分"+".*",但它没有被识别为注册 exp。我该怎么办??
(有点推测,但希望有帮助。
如果"字符串的常量部分"包含在正则表达式中具有特殊含义的字符,则很容易成为问题。解决此问题的方法是使用 Pattern.quote
.例如:
// ^ to anchor the match to the start of the line/string. May not be required.
Pattern pattern = Pattern.compile("^" + Pattern.quote(expectedPrefix) + ".*");
当然,只有当我必须使用正则表达式时,我才会使用它。否则我只会使用:
if (actualText.startsWith(expectedText))
我不确定您是如何执行此操作的,但是如果您正在这样做:
swtBotTree.expandNode("constant part of string" + ".*", true);
那么你很可能做错了...
expandNode的javadoc没有提到它支持正则表达式...
查看源代码(只是我在搜索时找到的一些版本),expandNode
使用另一种称为 getItem(...)
的方法。该方法的作用类似于 if (item.getText().equals(nodeText))
.换句话说,该方法使用字符串相等比较,而不是正则表达式匹配。
在Java中,支持正则表达式(看看Pattern javadoc和Matcher javadoc或String.matches(...)javadoc),但前提是在实现中使用了该功能。您不能将正则表达式传递给需要普通字符串并期望它执行正则表达式匹配的方法。
简短的回答:
Java 具有提供正则表达式功能的类,但 SWTBotTree.expandNode(String, boolean)
方法不支持正则表达式。
编辑:
据我了解,SWTBotTree
没有直接支持进行正则表达式/通配符查找。
如果你迫切地想这样做,你可以尝试这样的事情:
for(SWTBotTreeItem item : swtBotTree.getAllItems()){
if(item.getText().matches("some regex goes here")){
item.expand();
}
}