java - 带有特殊字符的 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)
请指导我如何添加解决此问题。提前致谢。
解决方案
如果您不想Pattern
处理搜索字符串中的特殊字符,则必须quote
:
this.searchString = ".*" + Pattern.quote(string) + ".*";
但由于您只是在元素中查找搜索字符串,因此根本不需要正则表达式。只需使用以下contains
方法String
:
if (stringToSearch.contains(stringToFind)) {
....
}
推荐阅读
- arcore - 对于 ARCore TramsformableNode,Pinch getture 在第一时间不起作用
- java - Switch 声明(价格以 5 美分递增)
- android - 当 Admob 横幅位于软键盘后面且不可见时,谷歌是否付费?
- css - background-size before IE9
- xamarin.forms - 在滚动回视图之前,Listview 不会渲染 viewcell
- firebase - Firebase 控制台未在任何浏览器中加载
- python - 为什么我的列在 django_tables2 中不包含它们各自属性的类名?
- svg - Webpack QuillJS 输出 SVG 路径而不是内联它
- reactjs - 是否有任何类似于 EXPO 的应用程序,可用于在 ios 设备上运行 javascript 应用程序,而无需发布到应用商店?
- node.js - Socket.io:找不到模块:无法解析“C\:....\node_modules\engine.io\lib”中的“uws”