java.util.regex.PatternSyntaxException while using RowFilter in java swing

67 Views Asked by At
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));
        }
    }
});

There is a column which contains + and - signs which I want to filter but I am getting this error while filtering row

[filter.java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 4 (?i)+ ]

1

There are 1 best solutions below

1
On
            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));

            }
        }
    });