2017-04-04 3 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가 아니라 matcher 로직입니다.

"유형"이 괄호 안에있는 것으로 항상 알고있는 경우 다음을 수행 할 수 있습니다.

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