2013-08-07 6 views
6

Ich habe eine Komma getrennte String, die ich in ArrayList konvertieren muss. habe ich versucht, auf diese WeiseWie man eine Komma-getrennte Zeichenkette in ArrayList in Java konvertiert

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 me die Runtime Error geben als

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

als ich eine Liste zu Arraylist mit Gewalt zu bekehren versuchte.

+2

versuchen 'Arraylist items = new Arraylist (Arrays.asList (CommaSeparated.split ("\\ s * \\ s *")))' – user902383

+0

Diese Frage nützlich sein können: http: //stackoverflow.com/questions/4658867/why-does-arrays-aslist-return-its-own-arraylist-implementation – Adil

Antwort

19

Die von Arrays.asList zurückgegebene ArrayList ist nicht java.util.ArrayList. Es ist java.util.Arrays.ArrayList. Du kannst es also nicht auf java.util.ArrayList übertragen.

Sie müssen die Liste der an den Konstruktor java.util.ArrayList Klasse weitergeben müssen:

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

oder können Sie einfach das Ergebnis zuordnen:

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

aber beachten Sie, Arrays.asList gibt eine feste Größe Liste . Sie können nichts hinzufügen oder entfernen. Wenn Sie etwas hinzufügen oder entfernen möchten, sollten Sie die 1. Version verwenden.

S.S. Sie sollten List als Referenztyp anstelle von ArrayList verwenden.

+0

Es ist super ärgerlich, dass sie zweimal den gleichen Namen 'ArrayList' verwendeten :) – arshajii

+0

varargs helfen nicht zu splitten eine Zeichenfolge - oberhalb der Angabe ist falsch. – fjf2002

2

Sie können nicht einfach Objekte herumwerfen, als wären sie Süßigkeiten. Arrays.asList() gibt keine ArrayList zurück, so dass Sie sie nicht umsetzen können (sie gibt eine nicht änderbare Liste zurück).

immer Sie new ArrayList(Arrays.asList(...));

+0

Es gibt keine unmodifizierbare Liste zurück, Sie können 'set (...)' trotzdem problemlos aufrufen. – arshajii

+0

@arshajii Fair genug, nennen wir es "konstant große Liste". – Kayaman

1

tun kann, braucht es unbedingt ein ArrayList zu sein? Normalerweise möchten Sie die allgemeinste Form verwenden. Wenn Sie ok mit sind versuchen, ein List gerade:

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

Sie noch über den gleichen Weg durchlaufen können Sie sich gerade befinden.

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

Bitte verwenden Sie den folgenden Code.

Zeichenfolge [] 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]); 

    } 
Verwandte Themen