2013-10-03 88 views
0

我使用这部分代码将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);打印双括号

+6

请格式化您的代码,它几乎不可读 – tom

+2

我认为你缺少点'list.getSelectedValuesList()。toString()'。你没有使用'JList'的通用接口,并且当你可以从'getSelectedValuesList()'获得'List '时,你正在解析'String'。 –

+0

其他方式正常工作: String str =“abc,def”; System.err.println(Arrays.asList(str.split(“\\ s *,\\ s *”))); – Optional

回答

2

你不必要的转换返回的List其原始String表示,分裂是StringString[],然后转换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); 


    } 
} 
+0

是的,但我需要信息来结束一个str数组列表。这就是为什么我使用:strlist = Arrays.asList(lstr.split(“\\ s *,\\ s *”)); @rob – user2598911

+0

我没跟着。你需要一个String []还是一个列表? – rob

+0

列表你是对的 – user2598911

2

当您拨打List.toString时,它会在结果中放上括号。

因此,您致电list.getSelectedValuesList(),您正在检索List<String>。你可以拨打toString()来得到"[a, b, c, d]"。然后,您将该字符串分割为逗号空间序列并获得"[a", "b", "c", "d]"。你把它放在另一个列表中,并且在它上面调用toString()并且围绕它得到另一个支架。

它是双括号,因为在第二个列表中,第一个条目是"[a",最后一个条目是"d]"

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(),打印清单时追加一组方括号。由于列表中的第一个元素以方括号开始,最后一个元素以一个结尾,所以最终结果是在开始和结尾处使用双括号。

相关问题