0
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)+ ]

  • If you can get this to work in a console app., it would work in `Swing`/`JTable`/`RowSorter`. Therefore none of those are relevant to the question. Tags removed, Java tag(1) added. 1) Which, as an aside, is likely followed by more people than the other 3 tags *combined*. – Andrew Thompson Apr 11 '22 at 12:37

1 Answers1

0
            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));

            }
        }
    });
  • Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Apr 12 '22 at 00:28