如何使用正则表达式validationJTable的第一列?

我正在制作一个程序,我必须validation第一列是否是IP地址。

到目前为止,我只想知道如何过滤行。 但是在将数据写入文件之前必须检查该列。

有人能帮助我吗?

您可以使用InputVerifier来validation表格单元格的输入。 这样, 所有输入都进入后,您不必validation所有内容,如果有许多不正确的输入,这可能会很麻烦。 使用InputVerifier您将获得每个单元格输入的validation。

这是一个例子。 我不确定正则表达式是否对IP地址是正确的,但我有一个最终的静态字段,你可以改为正确的,如果这个没有。

使用这个特定的InputVerifier ,如果该字段与正则表达式匹配,如果该字段为空,则它将允许焦点更改,否则您将获得错误对话框。

 text.matches(IP_REGEX) || text.isEmpty(); 

在此处输入图像描述

 import javax.swing.DefaultCellEditor; import javax.swing.InputVerifier; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.SwingUtilities; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellEditor; public class TableVerifyInput { private static final String IP_REGEX = "^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}$"; public TableVerifyInput() { final InputVerifier verifier = getInputVerifier(); final DefaultCellEditor editor = getTableCellEditor(verifier); String[] cols = {"IP address", "Column 2"}; Object[][] data = {{null, null}, {null, null}}; DefaultTableModel model = new DefaultTableModel(data, cols); JTable table = new JTable(model) { public TableCellEditor getCellEditor(int row, int column) { int modelColumn = convertColumnIndexToModel(column); if (modelColumn == 0) { return editor; } else { return super.getCellEditor(row, column); } } }; JFrame frame = new JFrame("Table Cell Verify"); frame.add(new JScrollPane(table)); frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setVisible(true); } private InputVerifier getInputVerifier() { InputVerifier verifier = new InputVerifier() { @Override public boolean verify(JComponent input) { JTextField field = (JTextField) input; String text = field.getText(); return text.matches(IP_REGEX) || text.isEmpty(); } @Override public boolean shouldYieldFocus(JComponent input) { boolean valid = verify(input); if (!valid) { JOptionPane.showMessageDialog(null, "Invalid IP address"); } return valid; } }; return verifier; } private DefaultCellEditor getTableCellEditor(final InputVerifier verifier) { DefaultCellEditor editor = new DefaultCellEditor(new JTextField()) { { getComponent().setInputVerifier(verifier); } @Override public boolean stopCellEditing() { if (!verifier.shouldYieldFocus(getComponent())) { return false; } return super.stopCellEditing(); } @Override public JTextField getComponent() { return (JTextField) super.getComponent(); } }; return editor; } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new TableVerifyInput(); } }); } } 

只需检索列数据并在其上应用正则表达式以检查有效的IP:

  String regex = "^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}$"; String ip = (String)table.getValueAt(row, column); boolean isValidIP = ip.matches(regex);