具有特殊字符的SWT表过滤器

时间:2018-12-27 09:27:52

标签: java jface 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)

请指导我如何添加以解决此问题。预先感谢。

1 个答案:

答案 0 :(得分:0)

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

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

但是,由于您只是在元素中寻找搜索字符串,因此您根本不需要正则表达式。只需使用contains的{​​{1}}方法:

String