java - 在Java中分割字符串并附加到列表

标签 java jlist

用例:我试图提取括号内的参数并将其填充到 jList 中。

输入:

title(a1, a3)

代码:

    static ArrayList variableList = new ArrayList();

    Matcher m = Pattern.compile("\\(([^)]+)\\)").matcher(result.toString().trim());
    while(m.find()) 
     { 
        if (!variableList.contains(m.group(1).trim()))
        { 
        variableList.add(m.group(1).trim());
        }
     }

    DefaultListModel lista1 = new DefaultListModel();
    for (int i = 0;i<variableList.size();i++)
     {
        if (!lista1.contains(variableList.get(i)))
        {
        lista1.addElement(variableList.get(i));
        }
    }

    jList.setModel(lista1);  
    revalidate();
    repaint();

jList 中的预期输出:

enter image description here

代码输出:

enter image description here

错误是不是垂直填充列表,而是作为一个组附加。请建议我如何纠正这个问题。

最佳答案

问题不在于您的 JList,而在于您的匹配器逻辑。

如果您始终知道您的“类型”将位于括号内,则可以执行以下操作。

// Declare lists
DefaultListModel<String> lista1 = new DefaultListModel<String>();
ArrayList<String> variableList = new ArrayList<String>();
JList<String> jList = new JList<String>();

String result = "type(t1, t2)";

// Get string within parenthesis
result = result.substring(result.indexOf('(') + 1, result.indexOf(')'));

// Split into elements
String[] types = result.split(",");

// For each, add to list if not duplicate
for (int i = 0; i < types.length; i++) 
 { 
    String type = types[i].trim();
    if (!variableList.contains(type))
    { 
        variableList.add(type);
        lista1.addElement(type);
    }
 }

jList.setModel(lista1);

// Add to frame/revalidate/repaint as needed

此外,参数化您的 JList 和 DefaultListModel。请参阅here

关于java - 在Java中分割字符串并附加到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43198190/

相关文章:

java - 停止 Swing 定时器直到用户点击

java - 在java中通过USB将文件从PDA复制到PC

用于验证字符串的 Java 正则表达式?

java - 通过 jFileChoser 添加文件到 jList

java - jList 禁用自动调整大小

java - 从文本字段输入中过滤 JList

Java返回值取决于字符串中猫和狗的出现?

java - 前后增量 java 评估

java - 如何禁用 JList 选择更改事件并仅在双击时调用它?

java - 将对象添加到 JList