我想使用SWTBotTree.expandNode(final String nodeText,final boolean recursive)函数和一个并不总是完全相同的String。字符串的开头是相同的,但结尾可以变化。我认为可以用reg来解决。进出口。类似于:“字符串的常量部分”+“。*”但它不被认为是reg。进出口。我该怎么办?
答案 0 :(得分:3)
(有些推测,但希望有帮助。)
如果“字符串的常量部分”包含在正则表达式中具有特殊含义的字符,那么这很容易成为问题。解决此问题的方法是使用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))
答案 1 :(得分:2)
我不确定你是怎么做的,但如果你这样做的话:
swtBotTree.expandNode("constant part of string" + ".*", true);
然后你很可能做错了......
javadoc for expandNode没有提及它支持正则表达式......
查看the source(我在搜索时找到的某个版本),expandNode
使用另一种名为getItem(...)
的方法。该方法与if (item.getText().equals(nodeText))
类似。换句话说,该方法使用字符串相等比较,而不是正则表达式匹配。
在Java中,支持正则表达式(请查看Pattern javadoc和Matcher javadoc或String.matches(...) javadoc),但前提是在实现中使用了该功能。您不能将正则表达式传递给需要普通String的方法,并期望它进行正则表达式匹配。
简答:
Java具有提供正则表达式功能的类,但SWTBotTree.expandNode(String, boolean)
方法不支持正则表达式。
修改强>
据我了解,SWTBotTree
没有直接支持进行正则表达式/通配符查找。
如果您非常想要这样做,您可以尝试以下方式:
for(SWTBotTreeItem item : swtBotTree.getAllItems()){
if(item.getText().matches("some regex goes here")){
item.expand();
}
}