কমা-বিচ্ছিন্ন স্ট্রিং কীভাবে বিভক্ত করবেন?


202

আমার কাছে একটি অজানা দৈর্ঘ্যের স্ট্রিং রয়েছে যা দেখতে দেখতে কিছুটা এমন দেখাচ্ছে

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

কমাগুলিতে এই স্ট্রিংটি ভাগ করার সর্বোত্তম উপায় কী হবে যাতে প্রতিটি শব্দ একটি অ্যারেলিস্টের উপাদান হয়ে উঠতে পারে?

উদাহরণ স্বরূপ

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
পদ্ধতি বিভাজন ("বিভক্ত চর") এটি আপনার স্ট্রিং ন্যাড পদ্ধতিকে বিভক্ত শব্দগুলির সাথে স্ট্রিং-অ্যারে তৈরি করবে।
সাইমন ডরোসিয়াক

উত্তর:


342

আপনি এটি করতে পারেন:

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

মূলত .split()পদ্ধতিটি (এই ক্ষেত্রে) ডেলিমেটার আপনি যাচ্ছেন তার অনুসারে স্ট্রিংটিকে বিভক্ত করবে এবং একটি স্ট্রিংয়ের অ্যারে ফিরিয়ে দেবে।

যাইহোক, আপনি অ্যারের পরিবর্তে স্ট্রিংগুলির তালিকার পরে বলে মনে করছেন, তাই অ্যারেটি অবশ্যই Arrays.asList()ইউটিলিটিটি ব্যবহার করে একটি তালিকায় পরিণত করতে হবে । এফআইআই যেমন ঠিক তেমন কিছু করতে পারে:

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

তবে একটি প্রকৃত কংক্রিট বাস্তবায়নের চেয়ে ইন্টারফেসে প্রোগ্রাম করা সাধারণত ভাল অনুশীলন, সুতরাং আমি 1 ম বিকল্পটি সুপারিশ করব।


9
মনে রাখবেন এটি মানগুলি ছাঁটাবে না তাই স্ট্রিংস.বিট (1) "বিড়াল" "বিড়াল" হবে না
Alb

45
str.splitরিজেক্সকে গ্রহণ করে যাতে আপনি ব্যবহার করতে পারেন str.split(",[ ]*");যাতে আপনি কমা এবং ক্যাপাসের পরে স্পেসগুলি সরিয়ে ফেলুন।
উল্টে

4
একটি কমা ডিলিমিটেড ফাইল (সিএসভি) এর উদ্ধৃতিগুলিতে আ কমা থাকতে পারে, অর্থাত এটি কোনও বিস্মৃতকর নয়। এই ক্ষেত্রে স্প্লিট কাজ করবে না।
স্টিভেন ট্রিগ

2
দ্বিতীয় বিকল্পটি কাস্ট করা হিসাবে প্রয়োজন ArrayList<String>
সি_বি

3
আপনার যদি খালি এন্ট্রিগুলি রাখা প্রয়োজন (যেমন, ধারাবাহিক অ্যারে দৈর্ঘ্যের জন্য) স্ট্যাকওভারফ্লো.com/Qestions/14602062/… অনুযায়ী স্প্লিট (",", - 1) ব্যবহার করুন
দ্রুত এনজি

157

ঠিক আছে, আপনি বিভক্ত করতে চান , তাই না?

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

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

আপনি অতিরিক্ত আইটেমের চারপাশে সাদা স্থান থেকে মুক্তি পেতে চান:

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

হ্যাঁ এটি সমাধানের অংশ। ওপি মনে হয় স্ট্রিংগুলির তালিকার পরে, অ্যারে নয়।
npinti

@ এনপিন্তি: হ্যাঁ, আপনার কাছে +1, আপনি দ্রুত ছিলেন এবং আমি আপনার প্রতিমাটি অনুলিপি করতে চাইনি Arrays.asList()
টমাসজ নুরকিউইচজ

1
আমি 10 ঘন্টা ধরে ভাবতে থাকি, তারপরে এসও অনুসন্ধান করি। জানতেন না যে এটি সহজেই স্প্লিট () স্প্লিট ();
ডেথআর

আপনি যদি ফলাফলের বিভক্ত আইটেমগুলিকে একটি অ্যারে না রেখে একটি সেটে সংরক্ষণ করতে চান তবে কী হবে?
মূসা কিরাতে

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
আমি এই @ উইজার্ড সম্পর্কে নিশ্চিত নই কারণ ট্রিমটি কেবল স্ট্রিংয়ের বাম এবং ডান স্থান সরিয়ে ফেলবে, তবে এতে স্থানটি নয়। তাই trim(" string, with , space ")হবে "string, with , space"
টমাস লেদুক

@ থমাস লেডুক যদি স্ট্রিংটি এর মতো হয় "dog, cat, bear, elephant, giraffe"তবে আপনার প্রয়োজন নেই trim()এবং আপনার ক্ষেত্রে যদি ব্যবহার করা হয় trim()তবে পুটটি এটি হবে "string,with,space"না"string, with , space"
উইজার্ড

trim()স্ট্রিংয়ের কেবল বাম এবং ডান স্থান নয় সমস্ত স্থান সরিয়ে ফেলবে
উইজার্ড

5
আপনি এটি পরীক্ষা? কারণ আমি কেবল একটি প্রোগ্রাম জাভা এবং স্ট্রিং " string, with , space ".trim()রিটার্ন লিখেছি "string, with , space"। জাভাডোক যেমন বলেছেন: স্ট্রিংয়ের একটি অনুলিপি প্রদান করে, শীর্ষস্থানীয় এবং পিছনের সাদা অংশটি বাদ দেওয়া হয়েছে। আপনি ভুল এবং @ ব্যবহারকারী 872858 সঠিক।
টমাস লেদুক

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()একটি পরিমার্জনযোগ্য ফেরত দেয়, সুতরাং আপনার যদি কোনও তালিকার প্রয়োজন Lists.newArrayList()হয় তবে উপরের মতো এটি মোড়ানো করুন । অন্যথায় কেবল ইটারেবলের সাথে যান, উদাহরণস্বরূপ:

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

কিভাবে নোট করুন trimResults() হ্যান্ডলগুলি সব আপনার চাহিদা করেও ছাঁটাই কোণ ক্ষেত্রে জন্য regexes খামচি , সঙ্গে যেমন String.split()

যদি আপনার প্রকল্পটি ইতিমধ্যে পেয়ারা ব্যবহার করে তবে এটি আপনার পছন্দসই সমাধান হওয়া উচিত। আরও কনফিগারেশন বিকল্পের জন্য পেয়ারা ব্যবহারকারী নির্দেশিকায় স্প্লিটর ডকুমেন্টেশন বা জাভাডোকগুলি দেখুন।


2

এটি আমার জন্য কাজ করে চেষ্টা করতে পারেন

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

অথবা

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

1

build.gradle এ পেয়ারা যুক্ত করুন

    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+", "")তবে সর্বাধিক দক্ষতা ব্যবহারের ক্ষেত্রে নির্ভর করে। ( জাভাতে স্ট্রিংস থেকে হোয়াইটস্পেস সরানোর জন্য @ গ্রুরসেলকোকার উত্তর দেখুন )


0

আপনি এর মতো কিছু ব্যবহার করতে পারেন:

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

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

এছাড়াও, আপনি libs অন্তর্ভুক্ত করতে চাই:

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

এই কোডটি আমি জেডিকে-র জন্য ব্যবহার করেছি। এবং যদি আপনার অ্যারে মুদ্রণ করা প্রয়োজন। System.out.println
সানডুন সুসন্ধা

-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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.