首页 > 解决方案 > 带有特殊字符的 SWT 表过滤器

问题描述

嗨,我正在向 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)

请指导我如何添加解决此问题。提前致谢。

标签: javajfacetableviewer

解决方案


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

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

但由于您只是在元素中查找搜索字符串,因此根本不需要正则表达式。只需使用以下contains方法String

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

推荐阅读