2013-03-11 2 views
12

में स्ट्रिंग को सरणी सूची में कनवर्ट करें बिना किसी विभाजक के स्ट्रिंग को ArrayList<Character> में परिवर्तित कैसे करें। जावा

मेरे स्ट्रिंग इस तरह है:

String str = "abcd..." 

मैं जानता हूँ कि ऐसा करने का एक ही रास्ता है char[] पहले करने के लिए स्ट्रिंग परिवर्तित है, और फिर परिवर्तित char []ArrayList <Character> करने के लिए।

क्या ऐसा करने का कोई बेहतर तरीका है? सीधे रूपांतरित करने की तरह? समय और प्रदर्शन को ध्यान में रखते हुए, क्योंकि मैं एक बड़े डेटाबेस के साथ कोडिंग कर रहा हूं।

import java.util.AbstractList; 
import java.util.List; 

public class StringCharacterList extends AbstractList <Character> 
{ 
    private final String string; 

    public StringCharacterList (String string) 
    { 
     this.string = string; 
    } 

    @Override 
    public Character get (int index) 
    { 
     return Character.valueOf (string.charAt (index)); 
    } 

    @Override 
    public int size() 
    { 
     return string.length(); 
    } 
} 

और फिर इस तरह इस वर्ग का उपयोग करें::

+0

तो ... क्या आप अंतर्निहित स्ट्रिंग लेना चाहते हैं और इसमें प्रत्येक चरित्र को किसी प्रकार के संग्रह में परिवर्तित करना चाहते हैं? यदि ऐसा है, तो आपने क्या प्रयास किया है? कुछ नमूना कोड फायदेमंद होगा। – Makoto

+0

क्या आप वाकई 'एर्रेलिस्ट' में कनवर्ट करना चाहते हैं या मूल स्ट्रिंग द्वारा समर्थित 'लिस्ट' में स्ट्रिंग को लपेटना चाहते हैं? –

+0

@ मकोटो मैंने 'char [] chars = str.toCharArray() की कोशिश की है; ArrayList mylist = नया ArrayList (); के लिए (चार सी: वर्ण) mylist.add (सी); ' –

उत्तर

2

आप सूची को संशोधित करने के बाद इसे बनाया जरूरत नहीं DN हैं, तो शायद बेहतर तरीका वर्ग में स्ट्रिंग लपेटो List<Character> इंटरफ़ेस इस तरह लागू करने के लिए होगा

List <Character> l = new StringCharacterList ("Hello, World!"); 
System.out.println (l); 
+0

धन्यवाद, लेकिन मुझे जो चाहिए वह एक ऐरेलिस्ट है :) –

1
public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     String str = "abcd..."; 
     ArrayList<Character> a=new ArrayList<Character>(); 
     for(int i=0;i<str.length();i++) 
     { 
      a.add(str.charAt(i)); 

     } 
     System.out.println(a); 
    } 
+0

धन्यवाद, मैंने इस तरह से कोशिश की जैसा मैंने अपनी पोस्ट में उल्लेख किया था। –

10

आपको इसे इस तरह जोड़ना होगा।

String str = "abcd..."; 
ArrayList<Character> chars = new ArrayList<Character>(); 
for (char c : str.toCharArray()) { 
    chars.add(c); 
} 
+0

ठीक है। मुझे नहीं लगता कि यह काम करता है। str.toCharArray() char [] लौटाएगा, जबकि आप इसे टाइप कैरेक्टर के साथ एक ऐरेलिस्ट को असाइन कर रहे हैं। अधिक सटीक होने के लिए, आप प्राइमेटिव्स की एक सरणी को इस तरह एक ArrayList में परिवर्तित नहीं कर सकते हैं। –

+0

@aga_pan इसे अपडेट किया गया। – squiguy

+0

यह काम करना चाहिए :), लेकिन जैसा कि मैंने उल्लेख किया है, आपने स्ट्रिंग को पहले चार सरणी में परिवर्तित कर दिया है, और उसके बाद इसे ऐरेलिस्ट प्राप्त करने के लिए एक-एक करके जोड़ा है। मैं अंतरिक्ष और समय लागत पर विचार कर रहा हूं जबकि स्ट्रिंग बहुत बड़ी है और डेटाबेस में तारों की संख्या भी बड़ी है। –

0

आप इस तरह यह कर सकते हैं:

import java.util.ArrayList; 

public class YourClass{ 

    public static void main(String [] args){ 

     ArrayList<Character> char = new ArrayList<Character>(); 
     String str = "abcd..."; 

     for (int x = 0; x < str.length(); x ++){ 
      char.add(str.charAt(x)); 
     } 
    } 
} 
0

वहाँ एक पंक्ति का guava समाधान है:

Lists.charactersOf("hello"); 

आप ArrayList के निर्माता को ImmutableList जिसके परिणामस्वरूप पारित कर सकते हैं, लेकिन मैं कह सकता है क्यों क्या आपको बिल्कुल ऐरेलिस्ट की ज़रूरत है?

1

रेट्रोबंप के लिए खेद है, लेकिन यह अब वास्तव में आसान है!

आप स्ट्रीम 8 का उपयोग कर जावा 8 में आसानी से ऐसा कर सकते हैं! इस प्रयास करें:

String string = "testingString"; 
List<Character> list = string.chars().mapToObj((i) -> Character.valueOf((char)i)).collect(Collectors.toList()); 
System.out.println(list); 

आप क्योंकि chars() रिटर्न एक IntStreammapToObj उपयोग करने के लिए की जरूरत है।

4

ऐसा करने के लिए लैम्ब्डा अभिव्यक्ति का उपयोग करें।

String big_data = "big-data"; 
ArrayList<Character> chars 
     = new ArrayList<>(
       big_data.chars() 
       .mapToObj(e -> (char) e) 
       .collect(
         Collectors.toList() 
       ) 
     );