Фильтр таблицы SWT со специальными символами - PullRequest
0 голосов
/ 27 декабря 2018

Привет! Я добавляю фильтр уровня столбца в просмотрщик таблиц, который будет содержать специальные символы в фильтруемом столбце.Этот столбец будет содержать строку xpath в качестве данных, которая, очевидно, будет содержать специальные символы, подобные приведенным ниже,

xpath = // a [@ name = 'Panel: 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 голосов
/ 27 декабря 2018

Если вы не хотите, чтобы Pattern обрабатывал специальные символы в строке поиска, вы должны quote it:

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

Но поскольку вы просто ищете строку поиска в элементе, который вына самом деле не нужно регулярное выражение вообще.Просто используйте contains метод String:

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