2013-08-07 16 views
6

Mam ciąg oddzielone przecinkami, które muszę przekonwertować na ArrayList. Próbowałem w ten sposóbJak przekonwertować ciąg znaków rozdzielany przecinkami do tablicy ArrayList w języku Java?

import java.util.ArrayList; 
import java.util.Arrays; 

    public class Test { 

     public static void main(String[] args) { 

      String CommaSeparated = "item1 , item2 , item3"; 

      ArrayList<String> items = (ArrayList)Arrays.asList(CommaSeparated.split("\\s*,\\s*")); 

      for(String str : items) 
      { 
       System.out.println(str); 
      } 

     } 

    } 

Its dając mi Runtime Error jak pokazano

Exception in thread "main" java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList 
    at com.tradeking.at.process.streamer.Test.main(Test.java:14) 

jak starałem się przekształcić List do ArrayList siłą.

+2

spróbuj 'ArrayList przedmiotów = new ArrayList (Arrays.asList (CommaSeparated.split ("\\ s * \\ s *")))' – user902383

+0

To pytanie może być użyteczne: http: //stackoverflow.com/questions/4658867/why-does-arrays-aslist-return-own-arraylist-implementation – Adil

Odpowiedz

19

Numer ArrayList zwrócony przez Arrays.asList nie jest java.util.ArrayList. Jest to java.util.Arrays.ArrayList. Nie możesz przesłać go na numer java.util.ArrayList.

Trzeba przekazać listę do konstruktora java.util.ArrayList Klasa:

List<String> items = new ArrayList<String>(Arrays.asList(CommaSeparated.split("\\s*,\\s*"))); 

lub można po prostu przypisać wynik:

List<String> items = Arrays.asList(CommaSeparated.split("\\s*,\\s*")); 

ale pamiętajcie, Arrays.asList zwraca listę stałym rozmiarze . Nie można do niej dodawać ani usuwać. Jeśli chcesz dodać lub usunąć coś, powinieneś użyć pierwszej wersji.

P.S: Jako typ odniesienia należy używać List zamiast ArrayList.

+0

To bardzo denerwujące, że użyli tej samej nazwy 'ArrayList' dwa razy :) – arshajii

+0

varargs nie pomagają podzielić ciąg znaków - powyższe roszczenie jest błędne. – fjf2002

2

Nie można po prostu rzucać przedmiotami jak cukierek. Arrays.asList() nie zwraca wartości ArrayList, więc nie można jej przesłać (zwraca niezmienną listę).

Jednak można zrobić new ArrayList(Arrays.asList(...));

+0

Nie zwraca ona niemodyfikowalnej listy, nadal można wywoływać 'set (...)' bez żadnych problemów. – arshajii

+0

@arshajii Wystarczająco fair, nazwijmy to "lista o stałym rozmiarze". – Kayaman

1

Czy to absolutnie trzeba być ArrayList? Zazwyczaj chcesz użyć najbardziej ogólnej formy. Jeśli jesteś ok użyciem List po prostu spróbuj:

List<String> items = Arrays.asList(...); 

Nadal można iteracyjne nad nim w ten sam sposób, które aktualnie znajdują.

1
String CommaSeparated = "item1 , item2 , item3";  
ArrayList<String> items = new ArrayList(Arrays.asList(CommaSeparated.split("\\s*,\\s*"))); 
for(String str : items) 
{ 
    System.out.println(str); 
} 
0

Proszę spróbować użyć poniższego kodu.

String [] temp;

/* delimiter */ 
    String delimiter = ","; 
    /* 
    * given string will be split by the argument delimiter provided. 
    */ 
    temp = parameter.split(delimiter); 
    ArrayList<String> list = new ArrayList<String>(); 

    for (int l = 0; l < temp.length; l++) 

    { 

     list.add(temp[l]); 

    } 
Powiązane problemy