繁体   English   中英

将字符串数组转换为列表:双括号

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM