【发布时间】:2019-05-25 08:15:01
【问题描述】:
您好,我正在向 tableviewer 添加列级过滤器,该过滤器将在被过滤的列中包含特殊字符。该列将包含 xpath 字符串作为数据,其中显然将包含如下特殊字符,
xpath=//a[@name='panels:swappableContent:toggleButton']/span[@class='standardized-icon expandIcon']
我已经创建了一个过滤器对象,代码如下,
public class ObjectLocatorFilter extends ViewerFilter {
private String searchString;
public void setSearchText(String string) {
// ensure that the value can be used for matching
this.searchString = ".*" + string + ".*";
}
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if(searchString == null || searchString.length() == 0){
return true;
}
Element elem = (Element) element;
if(elem.getObjectLocator().matches(searchString)){
return true;
}
return false;
}
}
并使用以下代码将过滤器添加到表格查看器中,
objectLocatorFilter = new ObjectLocatorFilter();
tableViewerPageObjects.addFilter(objectLocatorFilter);
tableViewerPageObjects.refresh();
但当尝试使用 [@class='' 之类的文本进行搜索时,会出现以下异常,
java.util.regex.PatternSyntaxException: Unclosed character class near index 13
.*[@class=''.*
^
at java.util.regex.Pattern.error(Pattern.java:1955)
at java.util.regex.Pattern.clazz(Pattern.java:2548)
请指导我如何添加解决此问题。提前致谢。
【问题讨论】:
-
当您似乎只是想匹配一个精确的字符串时,为什么要使用正则表达式?
Element是什么?请注意,TableViewer 是 JFace 而不是 SWT,但这似乎更像是一个 Java 问题。 -
过滤应用的列将具有类似的 xpath 字符串,其中,我只需要过滤所需的字符串,因此我需要传递一些列字符串可能包含的部分字符串。是的是 JFace 和 java,而不是 SWT。
-
在我的回答中,您不需要正则表达式来测试一个字符串是否包含另一个字符串。
标签: java jface tableviewer