[英]Converting string array to list: double brackets
我使用代码的这一部分将jlist中的选择项转换为字符串列表。 我得到以下结果:
[[String1, String2, String3,...]]
如何避免使用double []? 谢谢
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); 打印双括号
您不必要将返回的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);
}
}
当您调用List.toString
它会将结果放在方括号中。
因此,您调用list.getSelectedValuesList()
并检索List<String>
。 您在此上调用toString()
,从而得到"[a, b, c, d]"
。 然后,您在逗号空间序列上拆分此字符串,并获得"[a", "b", "c", "d]"
。 您将其放入另一个列表中,并在其上调用toString()
在其周围加上另一个括号。
用双括号括起来,因为在第二个列表中,第一个条目是"[a"
,最后一个条目是"d]"
!
这是为了回答您为什么要使用双方括号的问题。 有关编码的更好方法,请参见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(),在打印列表时该列表会附加一组方括号。 由于列表中的第一个元素以方括号开头,最后一个元素以方括号结尾,因此最终的结果是在开头和结尾处都使用双括号
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.