स्ट्रिंग को ArrayList में कैसे बदलें?


101

मेरे स्ट्रिंग में, मैं एक अनियंत्रित शब्द हो सकता है जो अल्पविराम से अलग हो। मैं चाहता था कि प्रत्येक शब्द एक ArrayList में जोड़ा जाए। उदाहरण के लिए:

String s = "a,b,c,d,e,.........";

जवाबों:


251

कुछ ऐसा आजमाएं

List<String> myList = new ArrayList<String>(Arrays.asList(s.split(",")));

डेमो:

String s = "lorem,ipsum,dolor,sit,amet";

List<String> myList = new ArrayList<String>(Arrays.asList(s.split(",")));

System.out.println(myList);  // prints [lorem, ipsum, dolor, sit, amet]

इस पोस्ट को यहाँ एक लेख के रूप में फिर से लिखा गया है


9
+1: इसका new ArrayList<String>()उपयोग कैसे किया जाता है, इसके आधार पर निरर्थक हो सकता है। (जैसा कि यह आपके उदाहरण में है;)
पीटर लॉरी

1
Hehe, हाँ, +1 :-) यह वास्तव में सिर्फ splitउसके बाद भी हो सकता है : P
aioobe

उसे Arrays.toString()इसे प्रिंट करने के लिए उपयोग करना होगा, लेकिन हाँ।
पीटर लॉरी

नया ArrayList <string> () इसके अंदर लौटी हुई सूची के साथ एक नई सूची बनाने का कारण बनता है। Arrays.asList (a) सूची ऑब्जेक्ट लौटाता है, इस प्रकार नए ArrayList को कॉल न करें, तो आपको अवांछित व्यवहार मिलेगा।
चौकीदार

6
ध्यान दें कि आप Arrays.asList द्वारा दी गई सूची में तत्वों को नहीं जोड़ सकते। ओपी एक ArrayList (जो पूरी तरह से उचित है) करना चाहते थे और ArrayList निर्माण है आवश्यक।
एनियोबेव

32
 String s1="[a,b,c,d]";
 String replace = s1.replace("[","");
 System.out.println(replace);
 String replace1 = replace.replace("]","");
 System.out.println(replace1);
 List<String> myList = new ArrayList<String>(Arrays.asList(replace1.split(",")));
 System.out.println(myList.toString());

8
यदि आपको कोष्ठक को ट्रिम करना है, तो आप इसे एक चरण में कर सकते हैंreplace = s1.replaceAll("^\\[|]$", "");
डेविड एहरमन

9

विकल्प 1 :

List<String> list = Arrays.asList("hello");

विकल्प 2 :

List<String> list = new ArrayList<String>(Arrays.asList("hello"));

मेरी राय में, Option1 बेहतर है क्योंकि

  1. हम ArrayList ऑब्जेक्ट्स की संख्या को 2 से 1. asListविधि से कम कर सकते हैं और ArrayList ऑब्जेक्ट बनाता है और देता है।
  2. इसका प्रदर्शन बहुत बेहतर है (लेकिन यह निश्चित आकार की सूची देता है)।

कृपया यहाँ प्रलेखन देखें


यह काम List<Character> word1 = new ArrayList<Character>(Arrays.asList(A[0].toCharArray()));मैं क्यों नहीं कर रहा हूँ मैं एक स्ट्रिंग सरणी का पहला स्ट्रिंग प्राप्त करने की कोशिश कर रहा हूं, और उस स्ट्रिंग को charArray में और उस charArray को सूची में बदलने के लिए <अक्षर>
sofs1

ऐसा इसलिए है, क्योंकि Arrays वर्ग में asList पद्धति केवल ऑब्जेक्ट एरी लेती है, न कि आदिम सरणियाँ। अगर आप char [] को Character [] array में कन्वर्ट करते हैं तो यह काम करेगा।
एंडी

सार्वजनिक स्थैतिक चरित्र [] boxToCharacter (char [] charArray) {चरित्र [] newArray = नया चरित्र [charArray.length]; int i = 0; for (char value: charArray) {newArray [i ++] = Character.valueOf (मान); } newArray वापस; }
एंडी

8

जावा 9 में, का उपयोग करते हुए List#of, जो एक अपरिवर्तनीय सूची स्टेटिक फैक्टरी विधियां हैं, अधिक सरल हो जाती हैं।

 String s = "a,b,c,d,e,.........";
 List<String> lst = List.of(s.split(","));

s.split("\\s*,\\s*")अतिरिक्त देखभाल के लिए जोड़ा जा सकता है
विश्वजीत आर। शिंदे

2

यदि आप आयात कर रहे हैं या आपके पास अपने कोड में एक सरणी (प्रकार का स्ट्रिंग) है और आपको इसे सरणीलिस्ट (ऑफकोर्स स्ट्रिंग) में बदलना है तो संग्रह का उपयोग बेहतर है। इस तरह:

String array1[] = getIntent().getExtras().getStringArray("key1"); or String array1[] = ... then

List allEds = new ArrayList(); Collections.addAll(allEds, array1);

2

ठीक है, मैं यहाँ उत्तर पर विस्तार करने जा रहा हूँ क्योंकि यहाँ आने वाले बहुत से लोग एक व्हाट्सएप द्वारा स्ट्रिंग को विभाजित करना चाहते हैं । यह कैसे किया जाता है:

List<String> List = new ArrayList<String>(Arrays.asList(s.split("\\s+")));

2

आप उपयोग कर सकते हैं:

List<String> tokens = Arrays.stream(s.split("\\s+")).collect(Collectors.toList());

आपको अपने आप से पूछना चाहिए कि क्या आपको वास्तव में पहले स्थान पर एरियरिस्ट की आवश्यकता है। बहुत बार, आप अतिरिक्त मानदंडों के आधार पर सूची को फ़िल्टर करने जा रहे हैं, जिसके लिए एक स्ट्रीम एकदम सही है। आप एक सेट चाहते हो सकता है; आप उन्हें एक अन्य नियमित अभिव्यक्ति के माध्यम से फ़िल्टर करना चाह सकते हैं, आदि। जावा 8 इस तरह से बहुत उपयोगी विस्तार प्रदान करता है, जो किसी भी पर काम करेगा CharSequence: https://docs.oracle.com/javase/8/docs/api /java/util/regex/Pattern.html#splitAsStream-java.lang.CharSequence- । चूँकि आपको सरणी की बिल्कुल आवश्यकता नहीं है, इसलिए इसे बनाने से बचें:

// This will presumably be a static final field somewhere.
Pattern splitter = Pattern.compile("\\s+");
// ...
String untokenized = reader.readLine();
Stream<String> tokens = splitter.splitAsStream(untokenized);

1

यदि आप एक स्ट्रिंग को ArrayList में बदलना चाहते हैं, तो यह कोशिश करें:

public ArrayList<Character> convertStringToArraylist(String str) {
    ArrayList<Character> charList = new ArrayList<Character>();      
    for(int i = 0; i<str.length();i++){
        charList.add(str.charAt(i));
    }
    return charList;
}

लेकिन मुझे आपके उदाहरण में एक स्ट्रिंग सरणी दिखाई देती है, इसलिए यदि आप एक स्ट्रिंग सरणी को ArrayList में उपयोग करना चाहते हैं, तो इसका उपयोग करें:

public static ArrayList<String> convertStringArrayToArraylist(String[] strArr){
    ArrayList<String> stringList = new ArrayList<String>();
    for (String s : strArr) {
        stringList.add(s);
    }
    return stringList;
}

एक सरल चरित्र आधारित दृष्टिकोण होगा: ArrayList <string> myList = new ArrayList <string> (); for (चरित्र c: s.toCharArray ()) {myList.add (c.toString ()); } लेकिन मुझे नहीं लगता कि यह वही व्यक्ति है जो खोज रहा है। Aioobe द्वारा समाधान वह है जो आवश्यक है। चीयर्स
स्टीव



0

चलो एक प्रश्न लेते हैं: रिवर्स अ स्ट्रिंग। मैं धारा () का उपयोग करके इसे इकट्ठा करूंगा ()। लेकिन पहले मैं स्ट्रिंग को एक ArrayList में बदल दूंगा।

    public class StringReverse1 {
    public static void main(String[] args) {

        String a = "Gini Gina  Proti";

        List<String> list = new ArrayList<String>(Arrays.asList(a.split("")));

        list.stream()
        .collect(Collectors.toCollection( LinkedList :: new ))
        .descendingIterator()
        .forEachRemaining(System.out::println);



    }}
/*
The output :
i
t
o
r
P


a
n
i
G

i
n
i
G
*/

1
तो ... आप एक अलग समस्या के बारे में एक उदाहरण बनाने के लिए स्वीकृत समाधान का उपयोग कर रहे हैं? क्यों?
फ्रांसेस्को बी।

0

मैं StringTokenizer का उपयोग करने की सलाह देता हूं, बहुत कुशल है

     List<String> list = new ArrayList<>();

     StringTokenizer token = new StringTokenizer(value, LIST_SEPARATOR);
     while (token.hasMoreTokens()) {
           list.add(token.nextToken());
     }

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.