[英]java.util.regex.PatternSyntaxException while using RowFilter in java swing
filterField.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
String query = filterField.getText().trim();
TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<DefaultTableModel>(model);
if (query.length() == 0) {
sorter.setRowFilter(null);
} else {
table.setRowSorter(sorter);
ArrayList<RowFilter<Object, Object>> filters = new ArrayList<RowFilter<Object, Object>>(5);
filters.add(RowFilter.regexFilter("(?i)" + query, 0));
filters.add(RowFilter.regexFilter("(?i)" + query, 1));
sorter.setRowFilter(RowFilter.orFilter(filters));
}
}
});
有一列包含我要过滤的+
和-
符号,但过滤行时出现此错误
[filter.java.util.regex.PatternSyntaxException:在索引 4 (?i)+ 附近悬挂元字符 '+']
public void keyReleased(KeyEvent e) {
String query = filterField.getText().trim();
TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<DefaultTableModel>(model);
String rquery = null;
if (query.length() == 0) {
sorter.setRowFilter(null);
} else {
table.setRowSorter(sorter);
if (query.contains("+")) {
int idx = query.indexOf("+");
rquery = new StringBuilder(query).insert(idx, "\\").toString();
query = rquery;
}
ArrayList<RowFilter<Object, Object>> filters = new ArrayList<RowFilter<Object, Object>>(1);
filters.add(RowFilter.regexFilter("(?i)" + query, 0));
filters.add(RowFilter.regexFilter("(?i)" + query, 1));
sorter.setRowFilter(RowFilter.orFilter(filters));
}
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.