2011-04-07 10 views
5

मैं उलझन में हूं कि लाइनों को तोड़ने का सही तरीका क्या है।लाइनों में स्ट्रिंग को कैसे तोड़ें

मैंने कहीं पढ़ा है कि विंडोज़ का उपयोग \ r \ n लाइनों को तोड़ने के लिए है, लेकिन यह दोनों कोड का उत्पादन एक ही

regex.split(sometext, "\r\n"); 
regex.split(sometext, "\n"); 

यह सही तरीका है क्या ?, इन भाव हमेशा एक ही उत्पादन?

+0

पहला - यह सी # नहीं है। .NET में 'Regex.Split' है। इसके बाद, आप अधिक जानकारी प्रदान कर सकते हैं - क्या आपको खाली लाइनों को संरक्षित करने की आवश्यकता है? डेटा कहां से आता है? – Kobi

+0

@ कोबी वह सिर्फ स्मृति से इसे लिखा होगा, जो गलत आवरण को समझा सकता है। – NKCSS

+0

@ एनकेसीएसएस - एक प्रश्न पूछते समय यह बहुत ही खराब अभ्यास है: ' – Kobi

उत्तर

3

आप (हर मंच के लिए नया ऑनलाइन वर्णों का समर्थन करते चाहते हैं जैसे आप इनपुट फ़ाइलें, लिनक्स के तहत बनाई पार्स करने के लिए की जरूरत है/आपके एएसपी में विंडोज/मैक।नेट वेब साइट) और आप रिक्त स्ट्रिंग के बारे में ले जाने के लिए नहीं है, मैं बजाय इस विधि का उपयोग करने के लिए सुझाव:

myString.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries) 

यह वापस आ जाएगी

["one","two","three"] 

इनपुट स्ट्रिंग

"one\r\ntwo\n\n\nthree" 

के लिए अद्यतन: यदि आपको खाली लाइनों को ले जाने की आवश्यकता है, तो आप

का उपयोग कर सकते हैं
myString.Replace("\r\n", "\n").Split("\n") 

यह "\ r \ n" और "\ n" EOL charracter फ़ाइलों दोनों के लिए काम करना चाहिए।

+0

अच्छा विचार मैं इसका उपयोग करने जा रहा हूं। और यदि मैं स्ट्रिंग में एक विषम अंत होता हूं तो मैं एक को हटा सकता हूं (बहुत असंभव रूप से होने के लिए) invisibles सीआर .... myString.Replace ("\ r \ n", "\ n")। ("\ आर "," ")। विभाजन (" \ n ") – mjsr

12

उपयोग

var myArray = sometext.Split(Environment.NewLine); 

Environment.NewLine अपने ऑपरेटिंग सिस्टम के लिए सही एक का चुनाव करेगा। यदि डेटा एक अलग सिस्टम पर बनाया गया था तो यह असफल हो जाएगा। कुछ है कि सभी सिस्टम पर काम कर सकते हैं, लेकिन कुछ अनपेक्षित परिणाम हो

var myArray = sometext.Split(new[] {'\r', '\n'}, 
    StringSplitOptions.RemoveEmptyEntries); 

कुछ संभव चिंताजनक चीजें हैं जो यह सब खाली लाइनों और कैरिएज रिटर्न पर विभाजन को हटा देगा है।

2

आप यह सुनिश्चित करने के लिए Environment.NewLine का उपयोग कर सकते हैं कि आप सही पाते हैं।

2

\ r एक carriage return \ n एक newline है।

विंडोज डिफ़ॉल्ट रूप से \ r \ n का उपयोग करता है (पर्यावरण। न्यूलाइन)

[Environment.NewLine हिस्सा स्पष्ट फिर से लिखा]

पर, आप Environment.NewLine, जो आपके मंच के आधार पर सही वर्ण रिपोर्ट करेंगे उपयोग कर सकते हैं अपने पाठ विभाजित करने के लिए सही वर्ण प्राप्त करने के लिए।

+0

@ एनकेसीएसएस: आपने मूल रूप से मूल प्रश्न में दी गई जानकारी को दोहराया और प्रश्न को अनदेखा कर दिया। कृपया अपना उत्तर सुधारने पर विचार करें। – blubb

+0

@ सिमन स्टेलिंग: मैं इसे लड़ता हूं। सवाल स्पष्ट रूप से कहता है कि वह \ r \ n और \ n के बीच का अंतर नहीं जानता है। मैंने यह भी समझाया कि \ r \ n का उपयोग क्यों किया जाता है (विंडोज़ डिफॉल्ट) और यहां से पर्यावरण से उपयोग करने का सुझाव देने की कोशिश की। न्यूलाइन यहां से बाहर। – NKCSS

+0

@ सिमन स्टेलिंग - यह एक कठोर मूल्यांकन है। जवाब में सुधार किया जा सकता है लेकिन मुझे नहीं लगता कि यह डाउनवोट (जो भी था) के लायक है। –

0

अन्य उत्तरों में उल्लिखित कारणों के लिए, केवल EDIT क्या कहता है। दोनों ठीक हैं, फिर भी व्यक्तिगत रूप से मैं का उपयोग करेंगे:

regex.split(sometext, "\n"); 

संपादित करें:

उपयोग Environment.Newline अन्य उत्तर में सुझाव के रूप में।

+0

पर्यावरण को अनदेखा करता हूं। न्यूलाइन का रास्ता तय करना है; आपका उदाहरण कुछ परिदृश्यों में \ r char के साथ टेक्स्ट छोड़ देता है, जो अवांछित है। – NKCSS

0
regex.split(sometext, "\r\n"); 

ऐसा करने का तरीका होगा।

कारण, दोनों एक ही परिणाम देने के लिए प्रतीत होते हैं क्योंकि, "\ n" "\ r" के बाद स्ट्रिंग को तोड़ देता है। तो आपके पास पिछली "\ r" के साथ एक सबस्ट्रिंग्स है, जो तब तक स्पष्ट नहीं होगा जब तक कि आप हेक्स संपादक या किसी चीज़ के साथ सावधानी से इसे न देख सकें।

कहा कि मैं "\ r \ n" के बजाय Environment.NewLine उपयोग करने का सुझाव था

संबंधित मुद्दे