我想将 SWTBotTree.expandNode (final String nodeText, final boolean recursive) 函数与一个并不总是完全相同的字符串一起使用。字符串的开头相同,但结尾可以不同。我以为可以用reg解决。exp。类似:“字符串的常量部分”+“。*”,但它未被识别为 reg。exp。我该怎么办??
2 回答
(有点投机,但希望有帮助。)
如果“字符串的常量部分”包含在正则表达式中具有特殊含义的字符,则很容易出现问题。解决这个问题的方法是使用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();
}
}