在 Java 中拆分字符串并附加到列表

Split string in Java and append to list

用例:我正在尝试提取括号内的参数并将其填充到 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 中的预期输出:

代码输出:

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

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

如果您始终知道您的 "types" 将在括号内,您可以执行以下操作。

// 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