मैं C # में मल्टी-कैरेक्टर सीमांकक द्वारा एक स्ट्रिंग कैसे विभाजित करूं?


233

क्या होगा यदि मैं एक शब्द है कि एक सीमांकक का उपयोग करके एक स्ट्रिंग को विभाजित करना चाहता हूं?

उदाहरण के लिए, 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
यह वास्तव में लौटता है: प्रश्न में दिए गए उदाहरण के साथ 'ठ' '' एक वाक्य ''। शायद यह वही है जो वह वास्तव में चाहता है, लेकिन यह वह नहीं है जो उसने निर्दिष्ट किया है।
IRBMe

6
यह सिर्फ एक उदाहरण है ... मुद्दा यह है: एक स्ट्रिंग है। यह है कि स्ट्रिंग को सीमांकक के रूप में लेता है।
ब्रूनो कोंडे

1
हां, लेकिन यह वह नहीं करता जो प्रश्न निर्दिष्ट करता है। आपको आउटपुट निर्दिष्ट करने के लिए कुछ अधिक चतुर उपयोग करना होगा। अब, क्या प्रश्न निर्दिष्ट किया गया है, वास्तव में प्रश्नकर्ता क्या चाहता है यह एक अलग प्रश्न है, लेकिन यहां पूछे गए प्रश्न का उत्तर केवल String.Split के साथ नहीं दिया जा सकता है।
IRBMe

3
अभी भी काफी काम नहीं करता है। यदि आप शब्द को विभाजित करने के लिए रिक्त स्थान शामिल करते हैं, तो वे आउटपुट में शामिल नहीं होते हैं। यदि आप प्रश्न में दिए गए उदाहरण की जांच करते हैं, तो आप देखेंगे कि वे वास्तव में रिक्त स्थान शामिल करते हैं। "यह है" आपको "यह" और "एक वाक्य" के बजाय "यह" और "एक वाक्य" देगा। "यह" के अंत में सूक्ष्म रिक्त स्थान पर ध्यान दें और "एक वाक्य" की शुरुआत करें। फिर, यह उत्तर शायद वही है जो प्रश्नकर्ता वास्तव में चाहता है, लेकिन यह वह नहीं है जो उसने पूछा है और, मैं दोहराता हूं, स्ट्रिंग। Split तुच्छ रूप से इसे हल नहीं करेगा।
IRBMe

2
@IRBMe क्या आपने प्रश्न पढ़ा है? "मैं" पर विभाजित करना चाहता हूं "। तो मुझे "यह" और "एक वाक्य" मिलेगा। परिणामों में रिक्त स्थान देखें ??? यह वास्तव में स्प्लिट क्या करता है।
ब्रूनो कोंडे

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

संपादित करें : यह आपके द्वारा दिए गए उदाहरण को संतुष्ट करता है। ध्यान दें कि " स्ट्रिंग " शब्द के अंत में एक साधारण स्ट्रिंग .plit भी " is " पर विभाजित हो जाएगा , इसलिए मैंने Regex पद्धति का उपयोग क्यों किया और " is " के चारों ओर शब्द सीमाओं को शामिल किया । हालाँकि, ध्यान दें, कि यदि आपने इस उदाहरण को गलती से लिखा है, तो String.Split शायद पर्याप्त होगा।


@ संपादित करें: मुझे या तो यकीन नहीं था, लेकिन आप अभी भी सामान्य स्ट्रिंग विभाजन का उपयोग कर सकते हैं और दोनों तरफ बस पैड स्पेस का उपयोग कर सकते हैं यदि उसका लक्ष्य केवल "शब्द" को हटाना है।
अंहकार

1
यह या तो काम नहीं करता है (कम से कम बहुत अधिक प्रयास के बिना नहीं), क्योंकि आप नहीं जानते कि क्या अंतरिक्ष को बाईं ओर, दाईं ओर या दोनों को जाना चाहिए, जो स्ट्रिंग में विभाजित शब्द के पदों को जाने बिना था। ।
IRBMe

स्ट्रिंग के रूप में अत्यधिक जटिल लगता है। संयम आपको पहले से ही एक स्ट्रिंग पर विभाजित करने की अनुमति देता है ...
एड एस।

3
मैंने पहले से ही अपने जवाब में अपने संपादन में, ऊपर की टिप्पणी में और दूसरे उत्तर पर 3 टिप्पणियों में इसे संबोधित किया है। String.Split प्रश्न में दिए गए उदाहरण के लिए काम नहीं करता है। मैं खुद को फिर से दोहराने नहीं जा रहा हूं कि क्यों समझा रहा हूं। यदि आप जानना चाहते हैं तो आप अन्य सभी टिप्पणियों को पढ़ सकते हैं।
IRBMe

ध्यान दें कि रेगेक्स स्प्लिट विधि चर पर पूर्व सीमांकक और अनुगामी सीमांकक को नहीं
हटाती है

35

इस पोस्ट पर मौजूदा प्रतिक्रियाओं के आधार पर, यह कार्यान्वयन को सरल बनाता है :)

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 क्या मतलब है "लगभग"?
मस्तूल

29
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]);

संपादित करें: "इस" को दोनों तरफ से रिक्त स्थान पर सरणी में रिक्त स्थान के साथ सरणी में रखा गया है ताकि आप केवल यह चाहते हैं कि शब्द "वाक्य से हटा दिया गया" और शब्द "यह" बरकरार रहे।


8

...संक्षेप में:

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

6

या इस कोड का उपयोग करें; (वही: नई स्ट्रिंग [])

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

5

आप अपने इच्छित विभाजन स्ट्रिंग को एक वर्ण के साथ बदलने के लिए String.Replace () का उपयोग कर सकते हैं जो स्ट्रिंग में नहीं होता है और फिर उसी प्रभाव के लिए परिणामी स्ट्रिंग को विभाजित करने के लिए उस वर्ण पर String.Split का उपयोग करें।


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 परिभाषित नहीं हैं। यह उल्लेख नहीं करने के लिए कि कोड वास्तव में काम नहीं करता है कि ओपी कैसे चाहता है। यह कोड इसे "Th" में विभाजित करता है और "बहुत आसान है"।
मैंड्रेको
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.