【问题标题】:Double split a string and add it to JTable双重拆分字符串并将其添加到 JTable
【发布时间】:2014-02-05 18:34:08
【问题描述】:

我的 gui 中有一个 Jtable 表和一个返回如下字符串的 java 方法:name1#surname1#job1$name2#surname2#job2 等。我不知道字符串的确切长度,因为它是根据我的数据库中有多少人创建的。我想拆分这个字符串并将其添加到 JTable 中,每个值都在正确的类别下!但我无法做到这一点。

这是我的 JTable 的代码:

table = new JTable();
    table.setRowSelectionAllowed(false);
    table.setModel(new DefaultTableModel(new Object[][] {
            {null, null, null},
            {null, null, null},
            {null, null, null},
            {null, null, null},
            {null, null, null},
            {null, null, null},
            {null, null, null},
            {null, null, null},
            {null, null, null},
            {null, null, null},
    }, new String[] {
            "Name", "Surname", "Job"}) {
        Class[] columnTypes = new Class[] { String.class, String.class,
                String.class};

        public Class getColumnClass(int columnIndex) {
            return columnTypes[columnIndex];
        }

【问题讨论】:

  • 很遗憾,您不能使用 $ 字符进行拆分。 Pattern 类中有一些字符是不允许拆分的。
  • 好吧,这是一个小问题,因为我可以将此字符更改为 #(again) 或空格!问题是如何拆分字符串并在右列中添加正确的值
  • '$' 是正则表达式中的一个特殊字符,用于检查行尾是否跟在后面。如果要使用此字符拆分字符串,则必须使用字符串 "\\$" 对其进行转义,如 peeskillet 示例中所示。这适用于所有特殊字符。 (IE。 '。')。要记住的关键是String.split() 接受一个用作正则表达式而不是字符串文字的字符串参数。

标签: java swing split jtable


【解决方案1】:
  1. 不要为模型设置空值。没有意义。就这样做

    String[] colNames = {"name", "surname","job"};
    DefaultTableModel model = new DefaultTableModel(colNames, 0):
    JTable table = new JTable(model);
    
  2. 然后通过$将String拆分成一个数组

    String[] lines = longString.split("\\$");
    
  3. 只需遍历该数组并再次拆分,然后将第二次拆分的数组添加到model

    for (String line : lines) {
        model.addRow(line.split("#");
    }
    

这就是它的全部内容:)

运行这个测试

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;

public class TestTable5 {

    public TestTable5() {
        String blah = "pee#skillet#assassin$pee#skillet#stackoverflow";
        String[] colNames = {"name", "surname", "job"};
        DefaultTableModel model = new DefaultTableModel(colNames, 0);
        JTable table = new JTable(model);

        String[] lines = blah.split("\\$");   // escape the $
        for (String line : lines) {
            model.addRow(line.split("#"));
        }

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new JScrollPane(table));
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new TestTable5();
            }
        });
    }
}

【讨论】:

  • @user3194811 很高兴为您提供帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多