2013-08-07 4 views
6

में अल्पविराम से अलग एक स्ट्रिंग को परिवर्तित करने के लिए कैसे करें मेरे पास एक अल्पविराम से अलग स्ट्रिंग है जिसे मुझे ArrayList में कनवर्ट करने की आवश्यकता है। मैं दिखायाजावा में

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) 

के रूप में मैं बल द्वारा ArrayList के लिए एक सूची कन्वर्ट करने के लिए कोशिश कर रहा था के रूप में इस तरह

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

     } 

    } 

इसका मुझे रनटाइम त्रुटि देने की कोशिश की।

+2

'कोशिश ArrayList आइटम = नए ArrayList (Arrays.asList (CommaSeparated.split (" \\ * है, \\ s * ")))' – user902383

+0

यह सवाल काम का हो सकता है: http: //stackoverflow.com/questions/4658867/why-does-arrays-aslist-return-its-own-arraylist-implementation – Adil

उत्तर

19

ArrayListArrays.asList द्वारा लौटा java.util.ArrayList नहीं है। यह java.util.Arrays.ArrayList है। तो आप इसे java.util.ArrayList पर नहीं डाल सकते हैं।

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

या, तो आप बस परिणाम प्रदान कर सकते हैं:

आप java.util.ArrayList वर्ग के निर्माता के लिए सूची में उत्तीर्ण होना

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

लेकिन आप मन, Arrays.asList एक निश्चित आकार सूची लौटाता है । आप इसमें कुछ भी जोड़ या हटा नहीं सकते हैं। अगर आप कुछ जोड़ना या हटाना चाहते हैं, तो आपको पहले संस्करण का उपयोग करना चाहिए।

पीएस: आपको ArrayList के बजाय संदर्भ प्रकार के रूप में List का उपयोग करना चाहिए।

+0

यह बहुत परेशान है कि उन्होंने एक ही नाम 'ArrayList' का उपयोग दो बार किया :) – arshajii

+0

varargs विभाजित करने में मदद नहीं करते हैं एक स्ट्रिंग - ऊपर दावा गलत है। – fjf2002

2

आप ऑब्जेक्ट्स को कैंडी की तरह ही नहीं डाल सकते हैं। Arrays.asList()ArrayList वापस नहीं करता है, इसलिए आप इसे नहीं डाल सकते (यह एक अपरिवर्तनीय सूची देता है)।

हालांकि आप new ArrayList(Arrays.asList(...));

+0

यह एक अपरिवर्तनीय सूची नहीं लौटाता है, फिर भी आप बिना किसी समस्या के 'सेट (...)' को कॉल कर सकते हैं। – arshajii

+0

@arshajii मेला पर्याप्त है, चलिए इसे "निरंतर आकार की सूची" कहते हैं। – Kayaman

1

क्या कर सकते हैं यह बिल्कुल एक ArrayList होने की जरूरत है? आम तौर पर आप सबसे सामान्य रूप का उपयोग करना चाहते हैं। यदि आप एक List का उपयोग कर ठीक कर रहे हैं बस कोशिश:

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

तुम अब भी इस पर उसी तरह आप वर्तमान में कर रहे हैं पुनरावृति कर सकते हैं।

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

कृपया कोड कोड का उपयोग करने का प्रयास करें।

स्ट्रिंग [] 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]); 

    } 
संबंधित मुद्दे