2017-04-04 69 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