2017-04-04 68 views
0

用例:我正在尝试将括号内的参数xtract并将其填充到jList中。在Java中分割字符串并追加到列表中

输入:

title(a1, a3) 

代码:在的jList

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

预期输出:

enter image description here

代码输出:

enter image description here

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

+0

然后您是否在某处打印此文件?代码显示列表的位置在哪里? – parkgrrr

回答

1

问题不在于你的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