您好,我要向表查看器添加列级过滤器,该过滤器将在要过滤的列中包含特殊字符。该列将包含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)
请指导我如何添加以解决此问题。预先感谢。
答案 0 :(得分:0)
如果您不希望Pattern
处理搜索字符串中的特殊字符,则必须quote
:
this.searchString = ".*" + Pattern.quote(string) + ".*";
但是,由于您只是在元素中寻找搜索字符串,因此您根本不需要正则表达式。只需使用contains
的{{1}}方法:
String