繁体   English   中英

在 java 中使用 RowFilter 时出现 java.util.regex.PatternSyntaxException swing

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM