2013-10-03 129 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(),打印清單時追加一組方括號。由於列表中的第一個元素以方括號開始,最後一個元素以一個結尾,所以最終結果是在開始和結尾處使用雙括號。

相關問題