2009-07-14 14 views
207

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

उदाहरण के लिए, This is a sentence

मैं is पर विभाजित करना चाहता हूं और This और a sentence प्राप्त करना चाहता हूं।

Java में, मैं एक स्ट्रिंग में एक डिलीमीटर के रूप में भेज सकता हूं, लेकिन मैं इसे C# में कैसे पूरा कर सकता हूं?

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

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

संपादित: यह उदाहरण आपको दे दी संतुष्ट

उत्तर

257

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

+4

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

+1

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

51

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

+0

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

+1

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

+0

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

4

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

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

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

+9

बेशक यह वाक्य के लिए तोड़ता है "यह वही है।" – JohnFx

-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)); 
+15

कोड पोस्ट करने से पहले, आपको शायद इसे पहले एक कंपाइलर के माध्यम से चलाने का प्रयास करना चाहिए, जब तक कि आप यह इंगित न करें कि आपने नहीं किया है। पहली पंक्ति से एक अर्धविराम गायब है, और str1 और str2 परिभाषित नहीं हैं। उल्लेख नहीं है कि कोड वास्तव में काम नहीं करता है कि ओपी कैसे चाहता था। यह कोड इसे "थ" में विभाजित करता है और "बहुत आसान है"। – mandreko

27

इस पोस्ट पर मौजूद प्रत्युत्तर के आधार पर, इस कार्यान्वयन :)

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


    } 
} 
+7

+1, यह एक विस्तार विधि के लिए चिल्लाता है। लगभग मूर्खतापूर्ण है कि यह अंतर्निहित ओवरलोड में से एक नहीं है। –

+7

@ToddMenier आपका क्या मतलब है "लगभग"? – mwardm

4

को आसान बनाने ... संक्षेप में:

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

या इस कोड का उपयोग करें; (समान: नई String [])

.Split(new[] { "Test Test" }, StringSplitOptions.None) 
संबंधित मुद्दे