2010-01-07 13 views
69

स्ट्रिंग। स्प्लिट एक डिलीमीटर पर एकाधिक भाग में स्ट्रिंग को विभाजित करने के लिए सुविधाजनक है।स्ट्रिंग। केवल सी # में पहले विभाजक पर सेट करें?

मुझे केवल पहले डेलीमीटर पर स्ट्रिंग को विभाजित करने के लिए कैसे जाना चाहिए। जैसे मैं एक स्ट्रिंग

"Time: 10:12:12\r\n" 

कर दिया है और इसके बाद के संस्करण आप पर विभाजित कर सकते मैं एक सरणी चाहते हैं की तरह

{"Time","10:12:12\r\n"} 
+0

व्हाइटस्पेस का उपयोग करके विभाजित? और एक arry = yourString.Split ('') सेट करें; –

+1

@RamgyBorja जो तब तक काम नहीं करेगा जब तक कि वह 'टाइम' से ':' को ट्रिम नहीं करता है और वैसे भी, – smurtagh

+0

@smurtagh हाँ से पूछा गया था, सुरक्षित कोडिंग के लिए –

उत्तर

128

सबसे अच्छा तरीका संभव अतिरिक्त रिक्त स्थान और इस तरह के संबंध में पार्सिंग को कितना लचीला होना चाहता है इस पर निर्भर करता है। आपको जो चाहिए उसे देखने के लिए सटीक स्वरूप विनिर्देशों की जांच करें।

yourString.Split(new char[] { ':' }, 2) 

आपको दो 2 सबस्ट्रिंग सीमित कर देगा। हालांकि, यह दूसरी स्ट्रिंग की शुरुआत में अंतरिक्ष को ट्रिम नहीं करता है। हालांकि विभाजन के बाद आप दूसरे ऑपरेशन में ऐसा कर सकते हैं।

yourString.Split(new char[] { ':', ' ' }, 2, 
    StringSplitOptions.RemoveEmptyEntries) 

काम करना चाहिए, लेकिन यदि आप एक हेडर नाम को विभाजित करने का प्रयास कर रहे हैं तो एक स्थान होगा।

yourString.Split(new string[] { ": " }, 2, 
    StringSplitOptions.None); 

वही करेगा जो आप वर्णन करते हैं, लेकिन वास्तव में अंतरिक्ष मौजूद होने की आवश्यकता है।

yourString.Split(new string[] { ": ", ":" }, 2, 
    StringSplitOptions.None); 

अंतरिक्ष वैकल्पिक बनती है, लेकिन आप अभी भी एक से अधिक अंतरिक्ष के मामले में TrimStart() होगा।

प्रारूप को कुछ हद तक लचीला रखने के लिए, और अपने कोड पठनीय, मैं पहले विकल्प के उपयोग करने का सुझाव:

string[] split = yourString.Split(new char[] { ':' }, 2); 
// Optionally check split.Length here 
split[1] = split[1].TrimStart(); 
+0

का उपयोग क्यों नहीं किया जाता है (स्ट्रिंग [], Int32, StringSplitOptions) अधिभार? (Http://msdn.microsoft.com/en-us/library/1bwe3zdy.aspx)। यह केवल .NET 2.0 और उसके बाद लागू होता है, लेकिन निम्नलिखित ओपी पूछ रहा था कि परिणाम वास्तव में देता है: yourString।विभाजन (नई स्ट्रिंग [] {":"}, 2, स्ट्रिंगस्प्लिटऑप्शन। कोई) – bernhof

+0

@ बर्नहोफ: यह करता है। मुझे यकीन नहीं है कि स्ट्रिंग में अतिरिक्त रिक्त स्थान (या कोई रिक्त स्थान) के मामले में क्या होना चाहिए। वांछित व्यवहार के आधार पर सबसे अच्छा दृष्टिकोण थोड़ा अलग है। – Thorarin

+2

मुझे यह बहुत भ्रमित लगता है कि आपके स्ट्रिंग की तरह कुछ। स्प्लिट (':', 2); काम नहीं करता ... आपके स्पष्टीकरण के लिए धन्यवाद! – Sebastian

12

अपने उदाहरण में देख ":" (यानी अंतरिक्ष में पूर्ण विराम वाले कोलन) इस प्रतीत होता है के रूप में हो जो आपने किया है। यदि आपने वास्तव में केवल पहले डिलीमीटर पर विभाजित किया है तो आप अपने दूसरे सरणी तत्व में एक अग्रणी स्थान देखेंगे।

हालांकि, आप शायद स्प्लिट की इस अधिभार पर गौर करना चाहिए ...

http://msdn.microsoft.com/en-us/library/c1bs0eda.aspx

public string[] Split(
    char[] separator, 
    int count 
) 

... जो आप सबस्ट्रिंग की एक अधिकतम संख्या निर्दिष्ट करने की अनुमति देता है।

3
?("Time: 10:12:12\r\n").Split(new char[] { ':', ' ' }, 2, 
    StringSplitOptions.RemoveEmptyEntries) 
{Dimensions:[2]} 
    [0]: "Time" 
    [1]: "10:12:12\r\n" 

अन्य विकल्प:

?("Time: 10:12:12\r\n").Split(new char[] { ':' }, 2) 
{Dimensions:[2]} 
    [0]: "Time" 
    [1]: " 10:12:12\r\n" 
?("Time: 10:12:12\r\n").Split(new char[] { ':' }, 1) 
{Dimensions:[1]} 
    [0]: "Time: 10:12:12\r\n" 
?("Time: 10:12:12\r\n").Split(new char[] { ':' }, 3) 
{Dimensions:[3]} 
    [0]: "Time" 
    [1]: " 10" 
    [2]: "12:12\r\n" 
+0

के परिणामों को अक्सर कैसे ट्रिम करता हूं यह डिलीमीटर कॉलन है, अंतरिक्ष नहीं। आप सही हैं कि अंतरिक्ष पर विभाजन करना ठीक होगा और 2 तत्व दें, लेकिन मुझे नहीं लगता कि यह सवाल पूछा जा रहा है। –

+0

याह, मनाया गया, तय – serhio

+0

असल में, यह यहां 4-तत्व सरणी देता है ... – Thorarin

1

मैं करने के लिए एक बदलाव को अपनाया है थोरिनिन का उत्तर ऊपर, नीचे आपकी आवश्यकता को संभालने में सक्षम होना चाहिए, साथ ही रिक्त स्थान को ट्रिम करना चाहिए।

yourString.Split(new []{'-'},2).Select(s => s.Trim()) 
संबंधित मुद्दे