带有特殊字符的 SWT table 过滤器

SWT table filter with special characters

您好,我正在向 table 查看器添加列级别过滤器,这将在要过滤的列中包含特殊字符。该列将包含 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;
    }
}

并使用以下代码将过滤器添加到 table 查看器,

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)

请指导我如何解决这个问题。提前致谢。

如果您不想 Pattern 处理搜索字符串中的特殊字符,您必须 quote 它:

this.searchString = ".*" + Pattern.quote(string) + ".*";

但是由于您只是在元素中查找搜索字符串,所以您实际上根本不需要正则表达式。只需使用 String:

contains 方法
if (stringToSearch.contains(stringToFind)) {
   ....
}