अल्पविराम से विभाजित स्ट्रिंग कैसे करें?


202

मेरे पास एक अज्ञात लंबाई के साथ एक स्ट्रिंग है जो कुछ इस तरह दिखता है

"dog, cat, bear, elephant, ..., giraffe"

इस स्ट्रिंग को अल्पविराम में विभाजित करने का इष्टतम तरीका क्या होगा ताकि प्रत्येक शब्द एक ArrayList का एक तत्व बन सके?

उदाहरण के लिए

List<String> strings = new ArrayList<Strings>();
// Add the data here so strings.get(0) would be equal to "dog",
// strings.get(1) would be equal to "cat" and so forth.

1
स्प्लिट मेथड ("स्प्लिटिंग चार") यह आपके स्ट्रीप नाड मेथड को विभाजित करता है, स्प्लिटेड शब्दों के साथ स्ट्रिंग-ऐरे बनाएगा।
साइमन डोरियाक

जवाबों:


343

आप ऐसा कर सकते हैं:

String str = "...";
List<String> elephantList = Arrays.asList(str.split(","));

मूल रूप से .split()विधि स्ट्रिंग को इस मामले में (इस मामले में) परिसीमन के अनुसार विभाजित करेगी और स्ट्रिंग की एक सरणी लौटाएगी।

हालाँकि, आप किसी सरणी के बजाय स्ट्रिंग्स की सूची के बाद प्रतीत होते हैं, इसलिए Arrays.asList()उपयोगिता को उपयोग करके सरणी को सूची में बदल दिया जाना चाहिए । एक FYI के रूप में आप भी ऐसा कुछ कर सकते हैं:

String str = "...";
ArrayList<String> elephantList = new ArrayList<>(Arrays.asList(str.split(","));

लेकिन आमतौर पर वास्तविक कंक्रीट कार्यान्वयन के बजाय इंटरफ़ेस के लिए प्रोग्राम करना बेहतर होता है, इसलिए मैं 1 विकल्प की सिफारिश करूंगा।


9
ध्यान रखें कि यह मानों को नहीं काटेगा। तार (1) "बिल्ली" होगा "बिल्ली" नहीं
अल्ब

45
str.splitरीगेक्स स्वीकार करता है ताकि आप str.split(",[ ]*");कॉमा के बाद कॉमा और रिक्त स्थान को हटा सकें।
vertti

4
एक अल्पविराम सीमांकित फ़ाइल (सीएसवी) का उद्धरणों में आ अल्पविराम हो सकता है, जिसका अर्थ है कि यह परिसीमन नहीं है। इस मामले में स्प्लिट काम नहीं करेगा।
स्टीवन ट्रिग

2
दूसरे विकल्प के लिए कास्ट की आवश्यकता होती है ArrayList<String>
C_B

3
यदि आपको खाली प्रविष्टियाँ रखने की आवश्यकता है (उदाहरण के लिए सुसंगत सरणी लंबाई), तो stackoverflow.com/questions/14602062/… के
Fast Engy

157

ठीक है, आप विभाजित करना चाहते हैं , है ना?

String animals = "dog, cat, bear, elephant, giraffe";

String[] animalsArray = animals.split(",");

यदि आप इसके अलावा आइटम के आसपास व्हाट्सएप से छुटकारा चाहते हैं:

String[] animalsArray = animals.split("\\s*,\\s*");

हाँ, यह समाधान का हिस्सा है। ऐसा लगता है कि ओपी स्ट्रिंग्स की सूची के बाद है, न कि एक सरणी के रूप में।
नपंती

@npinti: हां, आप के लिए +1, आप तेज़ थे और मैं आपके Arrays.asList()मुहावरे की नकल नहीं करना चाहता था ।
टॉमाज़ नर्कविक्ज़

1
मैं 10 घंटे तक सोचता रहा, फिर एसओ को खोजा। नहीं पता था कि यह .plit () के लिए इतना आसान है;
डेथ आरएस

क्या होगा अगर आप एक एरियर के बजाय एक सेट में परिणामी विभाजन वस्तुओं को स्टोर करना चाहते हैं?
मोशे कीरथे

29

आप इसे विभाजित कर सकते हैं और एक सरणी बना सकते हैं फिर सरणी की तरह पहुंच सकते हैं

String names = "prappo,prince";
String[] namesList = names.split(",");

आप जैसे पहुँच सकते हैं

String name1 = namesList [0];
String name2 = namesList [1];

या लूप का उपयोग कर

for(String name : namesList){
System.out.println(name);
}

आशा है इससे आपकी मदद होगी ।


18

एक छोटा सुधार: उपरोक्त समाधान वास्तविक स्ट्रिंग में अग्रणी या अनुगामी रिक्त स्थान को नहीं निकालेंगे। विभाजन को कॉल करने से पहले ट्रिम को कॉल करना बेहतर है। इसके अलावा,

 String[] animalsArray = animals.split("\\s*,\\s*");

उपयोग

 String[] animalsArray = animals.trim().split("\\s*,\\s*");

1
उर दूसरी पंक्ति के लिए, यदि हम ट्रिम () का उपयोग करते हैं, तो हमें स्पेस स्प्लिट की आवश्यकता नहीं है जैसे कि ("\\s*,\\s*")बस इसके उपयोग (",");से परिणाम समान होंगे।
वाइज़र्ड

5
मुझे यकीन नहीं है कि @WIZARD क्योंकि ट्रिम केवल स्ट्रिंग के बाएँ और दाएँ स्थान को हटाता है, लेकिन इसमें स्थान नहीं है। तो trim(" string, with , space ")होगा "string, with , space"
थॉमस लेडुक

@ThomasLeduc अगर स्ट्रिंग इस तरह की है "dog, cat, bear, elephant, giraffe"तो कोई जरूरत नहीं है trim()और उर मामले में यदि उपयोग किया जाता है trim()तो आउट "string,with,space"नहीं होगा"string, with , space"
WIZARD

trim()सभी स्थानों को न केवल स्ट्रिंग के बाएँ और दाएँ स्थान से हटा देगा
WIZARD

5
क्या आप इसका परीक्षण करते हैं? क्योंकि मैंने सिर्फ एक प्रोग्राम जावा और स्ट्रिंग " string, with , space ".trim()रिटर्न लिखा है "string, with , space"। जैसे कि जादवॉक कहते हैं: स्ट्रिंग की एक प्रति लौटाता है, जिसके साथ व्हाट्सएप छोड़ा जाता है। आप गलत हैं और @ user872858 सही है।
थॉमस लेडुक

3

पहले आप नामों को इस तरह विभाजित कर सकते हैं

String animals = "dog, cat, bear, elephant,giraffe";

String animals_list[] = animals.split(",");

अपने जानवरों तक पहुँचने के लिए

String animal1 = animals_list[0];
String animal2 = animals_list[1];
String animal3 = animals_list[2];
String animal4 = animals_list[3];

और आप जानवरों के नामों के आसपास सफेद रिक्त स्थान और अल्पविराम को भी हटाना चाहते हैं

String animals_list[] = animals.split("\\s*,\\s*");

3

पूर्णता के लिए, अमरूद पुस्तकालय का उपयोग करते हुए , आप करेंगे: Splitter.on(",").split(“dog,cat,fox”)

एक और उदाहरण:

String animals = "dog,cat, bear,elephant , giraffe ,  zebra  ,walrus";
List<String> l = Lists.newArrayList(Splitter.on(",").trimResults().split(animals));
// -> [dog, cat, bear, elephant, giraffe, zebra, walrus]

Splitter.split()एक Iterable देता है, इसलिए यदि आपको सूची की आवश्यकता है, तो इसे Lists.newArrayList()ऊपर के रूप में लपेटें । अन्यथा केवल उदाहरण के लिए Iterable के साथ जाएं:

for (String animal : Splitter.on(",").trimResults().split(animals)) {
    // ...
}

ध्यान दें कि कोने के मामलों के लिए रेगेक्स को जोड़करtrimResults() आपकी सभी ट्रिमिंग आवश्यकताओं को कैसे संभालता है , जैसे कि ।String.split()

यदि आपका प्रोजेक्ट पहले से ही अमरूद का उपयोग करता है, तो यह आपका पसंदीदा समाधान होना चाहिए। अमरूद उपयोगकर्ता गाइड या अधिक विन्यास विकल्पों के लिए javadocs में फाड़नेवाला प्रलेखन देखें ।


2

मेरे साथ काम कर सकते हैं

 sg = sg.replaceAll(", $", "");

वरना

if (sg.endsWith(",")) {
                    sg = sg.substring(0, sg.length() - 1);
                }

1

बिल्ड में। गेल जोड़ें

    compile group: 'com.google.guava', name: 'guava', version: '27.0-jre'

और फिर

    public static List<String> splitByComma(String str) {
    Iterable<String> split = Splitter.on(",")
            .omitEmptyStrings()
            .trimResults()
            .split(str);
    return Lists.newArrayList(split);
    }

    public static String joinWithComma(Set<String> words) {
        return Joiner.on(", ").skipNulls().join(words);
    }

का आनंद लें :)


0

सभी सफेद रिक्त स्थान निकालें और एक निश्चित आकार या अपरिवर्तनीय सूची बनाएं ( asList एपीआई डॉक्स देखें )

final String str = "dog, cat, bear, elephant, ..., giraffe";
List<String> list = Arrays.asList(str.replaceAll("\\s", "").split(","));
// result: [dog, cat, bear, elephant, ..., giraffe]

इसका उपयोग करना भी संभव है replaceAll(\\s+", "")लेकिन अधिकतम दक्षता उपयोग के मामले पर निर्भर करती है। (@GurselKoca देखने के जवाब के लिए जावा में तार से सफेद स्थान को निकाल )


0

आप कुछ इस तरह का उपयोग कर सकते हैं:

String animals = "dog, cat, bear, elephant, giraffe";

List<String> animalList = Arrays.asList(animals.split(","));

इसके अलावा, आप लिबास में शामिल होंगे:

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


0

कोटलिन में,

val stringArray = commasString.replace(", ", ",").split(",")

जहां stringArrayहै List<String>और commasStringहै Stringके लिए अल्पविराम और रिक्त स्थान के साथ


0

यह कॉमा द्वारा स्ट्रिंग को विभाजित करने का एक आसान तरीका है,

import java.util.*;

public class SeparatedByComma{
public static void main(String []args){
     String listOfStates = "Hasalak, Mahiyanganaya, Dambarawa, Colombo";
     List<String> stateList = Arrays.asList(listOfStates.split("\\,"));
     System.out.println(stateList);
 }
}

यह कोड मैंने JDK के लिए उपयोग किया था। और अगर आपको सरणी को प्रिंट करने की आवश्यकता है। System.out.println
Sandun Susantha

-1

एक फ़ंक्शन होता है जिसे replaceAll()सभी व्हाट्सएप को हटा दिया जा सकता है, जो आप चाहते हैं उनके साथ प्रतिस्थापित कर सकते हैं। उदहारण के लिए

String str="  15. 9 4;16.0 1"
String firstAndSecond[]=str.replaceAll("\\s","").split(";");
System.out.println("First:"+firstAndSecond[0]+", Second:"+firstAndSecond[1]);

तुम्हे दूंगा:

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