我使用这部分代码将jlist中的选择项转换为字符串列表。我得到以下结果:
[[String1, String2, String3,...]]
如何避免双重[]?感谢
static List<String> strlist = new ArrayList<String>();
public class tog {
List<String> strlisttemp = new ArrayList<String>();
final JList list = new JList(strlisttemp.toArray());
list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
final ListSelectionListener listSelectionListener = new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
String lstr = list.getSelectedValuesList().toString();
System.out.println(lstr);
strlist = Arrays.asList(lstr.split("\\s*,\\s*"));
}
};
list.addListSelectionListener(listSelectionListener);
JOptionPane.showMessageDialog(null, list, "Select", JOptionPane.QUESTION_MESSAGE);
System.out.println(strlist);
}
这是有问题的部分:当我打印lstr时,它正常工作[...]。当我使用它时:
strlist = Arrays.asList(lstr.split("\\s*,\\s*"));
然后是System.out.println(strlist);打印双括号
答案 0 :(得分:2)
您不必要地将返回的List
转换为原始String
表示形式,将String
拆分为String[]
,然后将String[]
转换为列表
相反,只需直接使用返回的List。
package com.example.list;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class ListExample {
static List<String> strlist = new ArrayList<String>();
public static void main(String[] args) {
List<String> strlisttemp = new ArrayList<String>();
strlisttemp.add("a");
strlisttemp.add("b");
strlisttemp.add("c");
final JList list = new JList(strlisttemp.toArray());
list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
final ListSelectionListener listSelectionListener = new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
strlist = list.getSelectedValuesList(); // use this instead
// String lstr = list.getSelectedValuesList().toString();
// strlist = Arrays.asList(lstr.split("\\s*,\\s*"));
System.out.println(strlist);
}
};
list.addListSelectionListener(listSelectionListener);
JOptionPane.showMessageDialog(null, list, "Select", JOptionPane.QUESTION_MESSAGE);
}
}
答案 1 :(得分:2)
当您致电List.toString
时,会在结果旁边放置括号。
因此,您致电list.getSelectedValuesList()
,即可检索List<String>
。您就此致电toString()
,即可获得"[a, b, c, d]"
。然后,将此字符串拆分为逗号空间序列,并获取"[a", "b", "c", "d]"
。你把它放到另一个列表中并在其上调用toString()
并获得另一个括号。
它是双括号,因为在第二个列表中,第一个条目是"[a"
,最后一个条目是"d]"
!
答案 2 :(得分:1)
这是为了回答你为何获得双方括号的问题。有关更好的编码方法,请参阅rob的回答。
String lstr = list.getSelectedValuesList().toString();
此时,lstr ==“[aaa,bbb,ccc]”
strlist = Arrays.asList(lstr.split("\\s*,\\s*"));
现在,此时,strlist的第一个元素将以'['开头,因为这是lstr的第一个字符,最后一个元素将以']'结尾,因为这是lstr的最后一个字符。
现在,当你去打印strlist
时System.out.println(strlist);
Java将隐式调用list.toString(),它在打印列表时附加一组方括号。由于列表中的第一个元素以方括号开头,而最后一个元素以一个结尾,因此您最终得到的是开头和结尾的双括号