2009-11-29 10 views
49

मेरे पास एक एएसपी.NET पृष्ठ है जिसमें एक बहुभाषी टेक्स्टबॉक्स है जिसे txbUserName कहा जाता है। तब मैं पाठ बॉक्स 3 नामों में पेस्ट करें और वे खड़ी गठबंधन कर रहे हैं:सी # के साथ कैरिज रिटर्न पर स्ट्रिंग कैसे विभाजित करें?

  • जेसन
  • Ammy
  • करेन

मैं किसी भी तरह के नाम लेने के लिए सक्षम होना चाहते हैं और उन्हें अलग भागों में विभाजित जब भी मैं कैरिज रिटर्न या नई लाइन का पता लगाता हूं तो स्ट्रिंग्स। मैं सोच रहा हूं कि एक सरणी जाने का रास्ता हो सकता है। कोई विचार?

धन्यवाद।

उत्तर

111
string[] result = input.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries); 

यह दोनों \ n और \ r \ n न्यूलाइन प्रकारों को कवर करता है और आपके उपयोगकर्ता दर्ज की जाने वाली खाली लाइनों को हटा देता है।

मैं निम्नलिखित कोड का उपयोग कर परीक्षण किया:

 string test = "PersonA\nPersonB\r\nPersonC\n"; 
     string[] result = test.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries); 
     foreach (string s in result) 
      Console.WriteLine(s); 

और इसे सही ढंग से प्रविष्टियों "व्यक्तित्व" के साथ एक तीन स्ट्रिंग सरणी, "PersonB" और "PersonC" में काम करता है, बंटवारे।

+4

वहाँ एक गारंटी है कि \ N, रखते हुए आप ऐसा होगा पहले नहीं विभाजन \ r \ n \ r करने के लिए कम? – spender

+0

मुझे यकीन है कि यह नहीं होगा। मैं काम पर अपने ऐप में इस लाइन का उपयोग करता हूं और इसका उपयोग क्लिपबोर्ड को एक बार में पार्स करने के लिए किया जाता है (किसी भी तरह उपयोगकर्ताओं को विंडोज़ पर यूनिक्स लाइन-एंडिंग की आवश्यकता होती है ...)। हालांकि, अगर ऐसा होता है, तो मुझे लगता है कि स्ट्रिंग सरणी तर्क में तारों को उलट करने से यह हल हो जाएगा। क्या किसी को पता है कि परीक्षण करने के लिए दोनों का मिश्रण कैसे उत्पन्न किया जाए? – jasonh

+7

@ जेसन: "मुझे पूरा यकीन है" ... प्रसिद्ध अंतिम शब्द। :) –

4

String.Split समारोह पर एक नज़र (सटीक सिंटैक्स के बारे में सुनिश्चित नहीं, मेरे सामने कोई आईडीई) है।

string[] names = txbUserName.Text.Split(Environment.Newline); 
+2

पर्यावरण। नवीनीकरण सर्वर के पर्यावरण का "न्यूलाइन" प्रतिनिधित्व है, यह नियंत्रित नहीं करता कि उपयोगकर्ता क्या इनपुट कर सकता है, है ना? –

+0

यदि कोई स्थिरता नियंत्रित कर सकता है कि उपयोगकर्ता क्या इनपुट कर सकता है, तो मैं अधिक माइक्रोसॉफ्ट स्टॉक खरीदूंगा ... एक * बहुत * अधिक। – TryCatch

+0

FWIW - "\ r" और/या "\ n" का उपयोग करना बेहतर है, मेरा उत्तर स्ट्रिंग को तोड़ने के लिए "बस उपयोग करें .split" पर अधिक केंद्रित है। बस खुश रहें कि आपको लिखना नहीं है। सी में टाइप करें और स्मृति और पॉइंटर्स को प्रबंधित करें! युवा whipper-snappers इसे आसान मिला मैं कहता हूँ। – TryCatch

5

किसी भी \r\n\n के साथ बदलें विभाजित तो, \n का उपयोग कर:

string[] arr = txbUserName.Text.Replace("\r\n", "\n").Split("\n".ToCharArray()); 
+0

क्यों 'नया char [] {' \ n '} 'का उपयोग न करें? –

+0

@ मैथ्यू: पुरानी आदतें मर जाती हैं: पी –

+2

@ मैथ्यू, @ ओ.के.डब्ल्यू: या यहां तक ​​कि केवल 'स्प्लिट (' \ n ')' का उपयोग करें क्योंकि सेपरेटर सरणी 'पैराम' पैरामीटर है। – LukeH

1
using System.Text; 
using System.Text.RegularExpressions; 


protected void btnAction_Click(object sender, EventArgs e) 
    { 
     string value = txtDetails.Text; 
     char[] delimiter = new char[] { ';','[' }; 
     string[] parts = value.Split(delimiter, StringSplitOptions.RemoveEmptyEntries); 
     for (int i = 0; i < parts.Length; i++) 
     { 
      txtFName.Text = parts[0].ToString(); 
      txtLName.Text = parts[1].ToString(); 
      txtAge.Text = parts[2].ToString(); 
      txtDob.Text = parts[3].ToString(); 
     } 
    } 
0

इस प्रयास करें:

message.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 

निर्माण करता है, तो:

var message = "test 1\r\ntest 2"; 

या

var message = "test 1\ntest 2"; 

या

var message = "test 1\rtest 2"; 
संबंधित मुद्दे