Похоже, вам нужно либо создать отдельный фильтр для каждого столбца и объединить их с AndFilter , либо написать свой собственный фильтр, переопределив метод include () .Для RegexFilter требуется соответствие только одного из указанных столбцов, и, похоже, нет способа изменить это.
Кстати, если вы хотите заставить регулярное выражение игнорировать регистр, вы должны добавить(?i)
к началу.Генерируемая вами строка совпадает с той, с которой вы начали, несмотря на то, что вы используете флаг CASE_INSENSITIVE.
РЕДАКТИРОВАТЬ: документ, с которым я связан, содержит пример создания AndFilter из двух RegexFilters, нопример довольно глупый.Он создает фильтр, который ищет foo
в любом столбце или bar
в любом столбце - что в точности совпадает с одним RegexFilter с foo|bar
в качестве регулярного выражения и без указания столбцов.Хороший пример AndFilter должен делать то, что может сделать только AndFilter: применять условия для двух или более столбцов одновременно, как вы пытаетесь это сделать.Вот как я бы фильтровал без учета регистра для Zac
в первом столбце и A
во втором:
List<RowFilter<Object,Object>> rfs =
new ArrayList<RowFilter<Object,Object>>(2);
filters.add(RowFilter.regexFilter("(?i)^Zac$", 0));
filters.add(RowFilter.regexFilter("(?i)^A$", 1));
RowFilter<Object,Object> af = RowFilter.andFilter(rfs);
Кроме того, если бы я принимал текст фильтра как пользовательский ввод (который, как вам кажется,буду делать), я бы, наверное, процитировал бы это сначала:
String regex = "(?i)^" + Pattern.quote(input) + "$";