在Java中分割字符串并追加到列表中
问题描述:
用例:我正在尝试将括号内的参数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();
预期输出:
代码输出:
错误是不是垂直填充列表,而是作为一个组追加。请建议我如何纠正这一点。
答
问题不在于你的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
然后您是否在某处打印此文件?代码显示列表的位置在哪里? – parkgrrr