আমি কীভাবে সি # তে একাধিক-অক্ষর ডিলিমিটার দিয়ে একটি স্ট্রিং বিভক্ত করব?


232

আমি যদি একটি ডিলিমিটার ব্যবহার করে একটি স্ট্রিং বিভক্ত করতে চাই তবে কী হবে?

উদাহরণস্বরূপ This is a sentence,।

আমি বিভক্ত করতে চান isএবং পেতে Thisএবং a sentence

ইন Java, আমি একটি ডিলিমিটার হিসাবে একটি স্ট্রিং প্রেরণ করতে পারি, তবে আমি কীভাবে এটি সম্পাদন করব C#?

উত্তর:


281

http://msdn.microsoft.com/en-us/library/system.string.split.aspx

দস্তাবেজ থেকে উদাহরণ:

string source = "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]";
string[] stringSeparators = new string[] {"[stop]"};
string[] result;

// ...
result = source.Split(stringSeparators, StringSplitOptions.None);

foreach (string s in result)
{
    Console.Write("'{0}' ", String.IsNullOrEmpty(s) ? "<>" : s);
}

7
এটি আসলে প্রত্যাবর্তন করে: 'থ' '' 'একটি বাক্য' প্রশ্নের সাথে দেওয়া উদাহরণ সহ। তিনি সম্ভবত এটিই চান, তবে তিনি যা নির্দিষ্ট করেছেন তা নয়।
আইআরবিএম

6
এটি কেবল একটি উদাহরণ ... বিন্দুটি হ'ল: এখানে একটি স্ট্রিং রয়েছে p
ব্রুনো কনদে

1
হ্যাঁ, তবে প্রশ্নটি যা নির্দিষ্ট করে তা এটি করে না do আউটপুট নির্দিষ্ট করার জন্য আপনাকে আরও কিছু চালাক কিছু ব্যবহার করতে হবে। এখন, প্রশ্নটি যা নির্দিষ্ট করেছে তা আসলে প্রশ্নকর্তা যা চান তা অন্য প্রশ্ন, তবে এখানে জিজ্ঞাসিত প্রশ্নটি কেবল স্ট্রিং.স্প্লিট দিয়ে তুচ্ছভাবে উত্তর দেওয়া যায় না।
আইআরবিএম

3
এখনও বেশ কাজ করে না। যদি আপনি শব্দের মধ্যে বিভক্ত হয়ে শব্দগুলি ফাঁস করেন তবে সেগুলিকে আউটপুট অন্তর্ভুক্ত করা হবে না। আপনি যদি প্রশ্নে প্রদত্ত উদাহরণটি পরীক্ষা করেন তবে আপনি লক্ষ্য করবেন যে এগুলিতে বাস্তবে স্থানগুলি অন্তর্ভুক্ত রয়েছে। "এর" উপর বিভক্তকরণ আপনাকে "এটি" এবং "একটি বাক্য" না দিয়ে "এটি" এবং "একটি বাক্য" দেয়। "এটি" এর শেষে এবং "একটি বাক্য" শুরুর সূক্ষ্ম স্পেসগুলি নোট করুন। আবার, এই উত্তর সম্ভবত প্রশ্নকর্তা আসলে যা চান, তবে এটি তিনি যা চেয়েছিলেন তা নয় এবং আমি পুনরায় বলি, স্ট্রিং.স্প্লিট এটিকে তুচ্ছভাবে সমাধান করবে না।
আইআরবিএম

2
@ আইআরবি আপনি কি প্রশ্নটি পড়েছেন? 'আমি' '' 'তে বিভক্ত হতে চাই। সুতরাং আমি "এটি" এবং "একটি বাক্য" পাব। ফলাফলগুলিতে শূন্যস্থান দেখুন ??? এটি স্প্লিট যা স্পষ্টভাবে তা করে।
ব্রুনো কনদে

55

আপনি Regex.Split পদ্ধতি ব্যবহার করতে পারেন , এরকম কিছু:

Regex regex = new Regex(@"\bis\b");
string[] substrings = regex.Split("This is a sentence");

foreach (string match in substrings)
{
   Console.WriteLine("'{0}'", match);
}

সম্পাদনা : এটি আপনার দেওয়া উদাহরণকে সন্তুষ্ট করে। মনে রাখবেন যে একটি সাধারণ স্ট্রিং.স্প্লিট এছাড়াও "বিভাজিত হবে হয় " শব্দ শেষে "এই", অত কেন আমি ব্যবহার Regex পদ্ধতি এবং প্রায় "শব্দ সীমানা অন্তর্ভুক্ত হয় "। তবে দ্রষ্টব্য, আপনি যদি এই উদাহরণটি ভুলভাবে লিখেছেন তবে স্ট্রিং.স্প্লিট সম্ভবত যথেষ্ট হবে।


@ সম্পাদনা: আমিও নিশ্চিত ছিলাম না তবে আপনি যদি এখনও তার স্ট্রোকটি "হয়" শব্দটি সরিয়ে ফেলতে চান তবে আপনি সাধারণ স্ট্রিং স্প্লিট এবং দু'পাশে কেবল প্যাড স্পেস ব্যবহার করতে পারেন।
অহোকার

1
এটি কোনওভাবেই কাজ করে না (কমপক্ষে অনেক বেশি প্রচেষ্টা ছাড়াই নয়), কারণ আপনি জানেন না যে স্ট্রিংয়ে বিভক্ত শব্দের অবস্থানগুলি না জেনে জায়গাটি বাম দিকে, ডান বা উভয়দিকে যেতে হবে কিনা you ।
আইআরবিএম

স্ট্রিং হিসাবে অত্যধিক জটিল বলে মনে হচ্ছে pস্প্লিটি আপনাকে ইতিমধ্যে একটি স্ট্রিংতে বিভক্ত করতে দেয় ...
এড এস

3
আমি ইতিমধ্যে আমার উত্তরে আমার সম্পাদনায় এটিকে সম্বোধন করেছি, উপরের মন্তব্যে এবং অন্য উত্তরের 3 টি মন্তব্যে। স্ট্রিং.স্প্লিট প্রশ্নের উত্তর দেওয়া উদাহরণটির জন্য কাজ করে না। আমি কেন আবার ব্যাখ্যা করে নিজেকে পুনরাবৃত্তি করতে যাচ্ছি না। আপনি যদি জানতে চান তবে অন্যান্য সমস্ত মন্তব্য পড়তে পারেন।
আইআরবিএম

দ্রষ্টব্য যে রেজেক্স স্প্লিট পদ্ধতিটি ভেরিয়েবলের পূর্ব সীমানা এবং চলমান ডিলিমিটারটিকে সরাবে না ... :(
মেলাওস

34

এই পোস্টে বিদ্যমান প্রতিক্রিয়াগুলির উপর ভিত্তি করে, এটি বাস্তবায়ন সহজ করে :)

namespace System
{
    public static class BaseTypesExtensions
    {
        /// <summary>
        /// Just a simple wrapper to simplify the process of splitting a string using another string as a separator
        /// </summary>
        /// <param name="s"></param>
        /// <param name="pattern"></param>
        /// <returns></returns>
        public static string[] Split(this string s, string separator)
        {
            return s.Split(new string[] { separator }, StringSplitOptions.None);
        }


    }
}

9
+1, এটি একটি এক্সটেনশন পদ্ধতির জন্য চিৎকার করে। প্রায় নির্বোধ যে এটি অন্তর্নির্মিত ওভারলোডগুলির মধ্যে একটি নয়।
টড মেনিয়ার

9
@ToddMenier আপনার সম্পর্কে "প্রায়" অর্থ কী?
mwardm

28
string s = "This is a sentence.";
string[] res = s.Split(new string[]{ " is " }, StringSplitOptions.None);

for(int i=0; i<res.length; i++)
    Console.Write(res[i]);

সম্পাদনা করুন: "হয়" অর্ডার সত্য যে আপনি সংরক্ষণ করার জন্য অ্যারের মধ্যে ব্যবধান সহ উভয় পক্ষের padded হয় শুধুমাত্র শব্দ চান বাক্য এবং শব্দ "এই" অক্ষত থাকা থেকে সরানো "হয়"।


8

...সংক্ষেপে:

string[] arr = "This is a sentence".Split(new string[] { "is" }, StringSplitOptions.None);

5

আপনি স্ট্রিংয়ের মধ্যে উপস্থিত না এমন একটি অক্ষরের সাথে আপনার কাঙ্ক্ষিত বিভক্ত স্ট্রিংটি প্রতিস্থাপন করতে স্ট্রিং.প্লেস () ব্যবহার করতে পারেন এবং তারপরে ফলাফলটি স্ট্রিংকে একই প্রভাবের জন্য বিভক্ত করতে স্ট্রিং.স্প্লিট ব্যবহার করুন character


5

অথবা এই কোড ব্যবহার করুন; (একই: নতুন স্ট্রিং [])

.Split(new[] { "Test Test" }, StringSplitOptions.None)

3

স্ট্রিং বিভাজকের সাথে বিভাজনটি করতে এখানে একটি এক্সটেনশন ফাংশন রয়েছে:

public static string[] Split(this string value, string seperator)
{
    return value.Split(new string[] { seperator }, StringSplitOptions.None);
}

ব্যবহারের উদাহরণ:

string mystring = "one[split on me]two[split on me]three[split on me]four";
var splitStrings = mystring.Split("[split on me]");

0
var dict = File.ReadLines("test.txt")
               .Where(line => !string.IsNullOrWhitespace(line))
               .Select(line => line.Split(new char[] { '=' }, 2, 0))
               .ToDictionary(parts => parts[0], parts => parts[1]);


or 

    enter code here

line="to=xxx@gmail.com=yyy@yahoo.co.in";
string[] tokens = line.Split(new char[] { '=' }, 2, 0);

ans:
tokens[0]=to
token[1]=xxx@gmail.com=yyy@yahoo.co.in

-5
string strData = "This is much easier"
int intDelimiterIndx = strData.IndexOf("is");
int intDelimiterLength = "is".Length;
str1 = strData.Substring(0, intDelimiterIndx);
str2 = strData.Substring(intDelimiterIndx + intDelimiterLength, strData.Length - (intDelimiterIndx + intDelimiterLength));

19
কোড পোস্ট করার আগে আপনার সম্ভবত এটি প্রথমে একটি সংকলকটির মাধ্যমে চালানোর চেষ্টা করা উচিত, যদি না আপনি উল্লেখ না করেন যে আপনি নেই। প্রথম লাইনটি থেকে একটি সেমিকোলন অনুপস্থিত এবং str1 & str2 সংজ্ঞায়িত করা হয়নি। ওপি কীভাবে চেয়েছিল কোডটি আসলে কাজ করে না তা উল্লেখ করার দরকার নেই। এই কোডটি এটিকে "থ" এ বিভক্ত করে এবং "অনেক সহজ"।
মান্দেরেকো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.