1

コードのこの部分を使用して、選択項目を 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); 二重括弧を印刷します

4

3 に答える 3

2

返さListれた を生のString表現に不必要に変換し、それを に分割してStringから、を ListString[]に変換しています。String[]

代わりに、返されたリストを直接操作してください。

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);


    }
}
于 2013-10-04T16:33:34.757 に答える
2

呼び出すList.toStringと、結果が括弧で囲まれます。

したがって、呼び出しlist.getSelectedValuesList()て、を取得していList<String>ます。これを呼び出すtoString()と、 が得られます"[a, b, c, d]"。次に、この文字列をカンマ スペース シーケンスで分割し、 を取得し"[a", "b", "c", "d]"ます。これを別のリストに入れて呼び出しtoString()、それを別のブラケットで囲みます。

この 2 番目のリストでは最初のエントリが"[a"で、最後のエントリが"d]"!であるため、二重括弧で囲まれています。

于 2013-10-04T16:36:30.360 に答える
1

これは、二重角括弧が表示される理由についての質問に答えるものです。これをコーディングするより良い方法については、rob's answer を参照してください。

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() を呼び出します。これは、リストを出力するときに一連の角括弧を追加します。リストの最初の要素は角かっこで始まり、最後の要素は角かっこで終わるため、最初と最後に二重かっこができます。

于 2013-10-04T16:39:02.170 に答える