2012-11-12 11 views
19

के पहले FIRST सेगमेंट प्राप्त करने के लिए तेज़ और चालाक तरीका मैं एक स्ट्रिंग पर split(' ') करता हूं और बाकी स्ट्रिंग प्राप्त करने के लिए मैं लौटा स्ट्रिंग का पहला तत्व खींचना चाहता हूं।सी # स्ट्रिंग

f.e. "THIS IS AN AMAZING STRING".split(' ');

मैं सभी शब्द प्राप्त करना चाहता हूं लेकिन यह। यह है: एक अद्भुत STRING

स्ट्रिंग हमेशा पहले और दूसरे शब्द के बीच कम से कम एक रिक्त स्थान है, क्योंकि मैं रखा जाएगा होगा यह मुश्किल कोडित

वहाँ एक समारोह है कि इस बनाता है? धन्यवाद

+0

+1 यह पोस्ट वास्तव में उपयोगी है। (मेरे लिए कम से कम) –

+0

धन्यवाद। मुझे ये सुनके ख़ुशी हुई। – anmarti

+2

क्या आप स्पष्टीकरण दे सकते हैं यदि आप स्ट्रिंग-एस या ऐरे-एस को संसाधित करना चाहते हैं? मैंने अपने उत्तर में भी सरणी के लिए संभावित समाधान शामिल किया, न केवल –

उत्तर

37

string X = "THIS IS AN AMAZING STRING"; 
string Y = (X.IndexOf (" ") < 0) ? string.Empty : X.Substring (X.IndexOf (" ") + 1); // Y = IS AN AMAZING STRING 

कोशिश टिप्पणी के अनुसार आदि की जाँच .:

string Y = X.Substring (X.IndexOf (" ") + 1); 
+2

इसमें 'प्रतीक' शामिल होगा ... –

+0

@ Knaģis धन्यवाद, सही। – Yahia

+1

कुछ चेक जोड़ने पर भी विचार करें कि स्ट्रिंग में कोई स्थान नहीं होने पर यह तोड़ नहीं जाएगा। – Servy

17
var a = "THIS IS AN AMAZING STRING".Split(' '); 
string amazing = String.Join(" ", a.Skip(1)); 

आप pre-.NET 4 पर हैं, तो आप छोड़ें कॉल के अंत में एक .ToArray() छड़ी की जरूरत है - क्योंकि String.Join अधिभार कि दूसरा पैरामीटर के रूप में गणनीय लेता है पहले .NET 4.

हालांकि यह सामान्य मामले में अच्छी तरह से काम करता है, यदि आप हमेशा पहले शब्द को हटाना चाहते हैं, तो ऐसा करने का एक बेहतर तरीका है, जैसा टिप्पणियों में रीड द्वारा इंगित किया गया है:

var a = "THIS IS AN AMAZING STRING".Split(new char[] {' ' }, 2); 
string amazing = a[1]; //Perhaps do a length check first if you are not sure there is a space in the original string. 

यह बड़े स्ट्रिंग के लिए बेहतर प्रदर्शन करता है, केवल स्प्लिट के बाद से इसे पहली जगह मिलने तक देखने की आवश्यकता है, और उसके बाद केवल दो तारों के साथ परिणाम बना सकते हैं - और यह स्ट्रिंग से बचता है। जोइन महंगा हो सकता है, खासकर लंबे तारों के लिए।

+5

यह विशेष रूप से तेज़ नहीं है, लेकिन यह आसान है। हालांकि इस अधिभार का उपयोग करके इसे बेहतर किया जा सकता है: http://msdn.microsoft.com/en-us/library/c1bs0eda.aspx –

+0

क्यों -1? ध्यान दें कि प्रश्न में शीर्षक में एक सरणी शामिल है, इसलिए यह जानने का कोई तरीका नहीं है कि ओपी वास्तव में स्ट्रिंग को पहले स्थान पर विभाजित करने के लिए है या नहीं। – driis

+0

और हां, यह करने का सबसे प्रभावशाली तरीका नहीं है, लेकिन यह संक्षेप में है, और अधिकांश उपयोगों के लिए प्रदर्शन अंतर कोई फर्क नहीं पड़ता। – driis

17

का उपयोग न करें के बिना एक सरल संस्करण (यदि X कम से कम एक स्थान के साथ एक मान्य स्ट्रिंग होने की गारंटी है) Split फ़ंक्शन - ए) यह प्रत्येक ' ' प्रतीक के लिए दिखता है, केवल पहले ही नहीं। बी) इस दृष्टिकोण में स्मृति में चारों ओर डेटा कॉपी करने के बहुत सारे शामिल होंगे जो तारों के लिए धीमी गति से संचालन है।

var a = "THIS IS AN AMAZING STRING"; 
string result; 
var index = a.IndexOf(' '); 
if (index == -1) 
    result = null; 
else 
    result = a.Substring(index + 1); 

के बाद से सवाल का शीर्षक उल्लेख सरणी, नहीं स्ट्रिंग, यह ArraySegment वर्ग उल्लेख के लायक है - यह (एक नई सरणी और नकल डेटा बनाने के बिना) सरणी के भाग के लिए सूचक बनाने के लिए सक्षम बनाता है:

var a = new int[] { 0, 1, 2, 3 }; 
var segment = new ArraySegment<int>(a, 1, a.Length - 1); 
+0

संकलित नहीं होगा ... (स्प्लिट एक सरणी देता है, शायद आप इसका मतलब नहीं था) – driis

+2

मैं इसका उपयोग क्यों नहीं करना चाहूंगा? – Fredrik

+0

@driis - हां, लाइन को कॉपी-पेस्ट किया गया और उसे नोटिस नहीं किया –

0

उपयोग करने के लिए इस

string str = "THIS IS AN AMAZING STRING"; 
    string firstString = str.Split(' ')[0]; //get the first string 
    string newStr = str.Replace(firstString + " ", ""); //remove the first string 

    //OR 

    string newStr = str.Remove(0, firstString.Length + 1); 
+0

में सबकुछ के चारों ओर स्प्लिट प्रतिलिपि का एक ही मुद्दा है और प्रतिस्थापन भी प्रत्येक मैच को ढूंढने के लिए दूसरी बार स्ट्रिंग को पार करेगा। प्लस यह 'काम करने के लिए काम नहीं करता है यह है अमेज़िंग!' –

+0

'निकालें' के बारे में क्या? – codingbiz

26

एक काफी अच्छा विकल्प का प्रयास होगा:

string original = "THIS IS AN AMAZING STRING"; 
string[] split = original.Split(new []{' '}, 2); 
string result = split[1]; 

ध्यान दें कि, अगर आप सिर्फ जिसके परिणामस्वरूप स्ट्रिंग चाहते हैं, तो आप इस छोटा कर सकते हैं:

var result = original.Split(new []{' '}, 2)[1]; 

जो विभाजन की एक अधिकतम संख्या लेता है string.Split के अधिभार का उपयोग करके आप में शामिल होने के साथ-साथ करने के लिए आवश्यकता से बचने अतिरिक्त ओवरहेड।

+2

_Well वास्तव में, स्प्लिट के लिए दूसरा तर्क 2 ;-) होना चाहिए। इसके अलावा मैं सहमत हूं। – driis

+0

@ ड्रिइस ओप्स - निश्चित। –

2

बहुत बस, तुम कर सकते हो:

string input = "THIS IS AN AMAZING STRING"; 
string result = input.Substring(input.IndexOf(' ') + 1); 

इस मामले के लिए निवेश के प्रकार आप निर्दिष्ट कर रहे हैं (जहां हमेशा अपने स्ट्रिंग में पहले दो शब्दों के बीच स्पेस है) के लिए काम करेंगे, लेकिन जहां इनपुट स्ट्रिंग में रिक्त स्थान नहीं होते हैं, यह पूरी स्ट्रिंग को समान रूप से देता है।

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