2009-12-29 23 views
42

का उपयोग करते समय ट्रिम() निष्पादित करें आज मैं सोच रहा था कि कोई बेहतर समाधान निम्न कोड नमूना निष्पादित करता है या नहीं।स्प्लिट()

string keyword = " abc, foo ,  bar"; 
string match = "foo"; 
string[] split= keyword.Split(new char[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries); 
foreach(string s in split) 
{ 
    if(s.Trim() == match){// asjdklasd; break;} 
} 

क्या प्रत्येक आइटम के माध्यम से मैन्युअल रूप से पुन: प्रयास किए बिना ट्रिम() करने का कोई तरीका है? मैं कुछ निम्नलिखित खोजों से विभाजित हूं और स्वचालित रूप से प्रत्येक परिणाम को ट्रिम कर रहा हूं।

आह, immediatly पोस्ट करने से पहले मैं How can I split and trim a string into parts all on one line?

फिर भी में

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList(); 

पाया मैं उत्सुक हूँ: वहाँ इस के लिए एक बेहतर समाधान हो सकता है? ,

string line = " abc, foo ,  bar"; 
string[] parts= Array.ConvertAll(line.Split(','), p => p.Trim()); 

लेकिन अगर तुम सिर्फ: (या संकलक शायद उन्हें Linq-ऑपरेशन के रूप में एक ही कोड उत्पादन के लिए बदल जाएगा?)

+0

"बेहतर" को परिभाषित ... आप अधिक पठनीय मतलब है? और तेज? – Ragepotato

+0

पठनीयता खोने के दौरान तेज़/अधिक प्रदर्शनकारी। मार्क ग्रेवेल के एंगर्स की तरह। – citronas

उत्तर

68

एक अन्य संभावित विकल्प (कि LINQ, से बचा जाता है बेहतर या बदतर के लिए) यह जानने की जरूरत है कि यह वहां है - शायद शॉर्ट-सर्किट?

bool contains = line.Split(',').Any(p => p.Trim() == match); 
+0

ओह, हाँ आप बिल्कुल सही हैं। ऐसा लगता है कि मुझे किसी भी() विधि में उपयोग करना होगा;) धन्यवाद – citronas

+3

http://stackoverflow.com/questions/1728303/how-can-i-split-and-trim-a-string- इन-पार्ट्स-ऑल-ऑन-वन-लाइन शायद अधिक सुरुचिपूर्ण है? –

3

मैं मूल स्ट्रिंग पर नियमित अभिव्यक्ति का उपयोग करते हुए, पैटर्न "अपने सीमांकक में से एक में एक या अधिक रिक्त स्थान के द्वारा पीछा किया, जिसके बाद रिक्त स्थान के किसी भी संख्या" की तलाश में सुझाव देते हैं और उन स्थानों को हटाना होगा। फिर विभाजित करें।

+0

रेगेक्स, उस बारे में सोचा नहीं है, लेकिन आप सही हैं, एक और संभावित समाधान होगा। धन्यवाद – citronas

+1

मैं इस तरह की छोटी समस्या के लिए नियमित अभिव्यक्तियों का उपयोग करने के खिलाफ बहुत अधिक होगा। "अब आपके पास दो समस्याएं हैं" के बारे में http://www.codinghorror.com/blog/archives/001016.html देखें। – Eilon

+0

वैसे मैं नियमित अभिव्यक्तियों को लिखने में निराश हूं, और इसे खराब कर दूंगा, इसलिए मैं इसे टीबीएच का उपयोग नहीं करता, लेकिन यह खोज और प्रतिस्थापन के लिए एक काफी सरल पैटर्न लगता है और मैंने सोचा होगा कि किसी भी विधि से तेज़ होगा विभाजन के बाद प्रत्येक तत्व पर एक .Trim() करता है। – MikeW

1

आपको ऐसा करने के कई तरीके मिलेंगे और प्रदर्शन परिवर्तन और सटीकता आसानी से स्पष्ट नहीं होने वाली है। मैं उन्हें सभी को एक परीक्षण सूट में प्लग करने की सलाह दूंगा जैसे कि एनयूनीट दोनों को यह पता लगाने के लिए कि कौन सा शीर्ष पर आता है और कौन सा सटीक है।

विभिन्न स्थितियों की जांच करने के लिए लूप में छोटे, मध्यम और बड़ी मात्रा में टेक्स्ट का उपयोग करें।

3

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

string keyword = " abc, foo ,  bar"; 
string match = "foo"; 
string[] split = Regex.Split(keyword.Trim(), @"\s*[,;]\s*"); 
if (split.Contains(match)) 
{ 
    // do stuff 
} 
3

तो रिक्त स्थान सिर्फ चारों ओर से घेरे अल्पविराम से अलग स्ट्रिंग में शब्द यह काम करेगा:

var keyword = " abc, foo ,  bar"; 
var array = keyword.Replace(" ", "").Split(','); 
if (array.Contains("foo")) 
{ 
    Debug.Print("Match"); 
} 
+1

ओएमजी, उस बारे में सोचा नहीं है। आज मेरा दिन नहीं था =) – citronas

+2

यह समाधान काम नहीं करता है यदि एक एकल मान में 1 या अधिक रिक्त स्थान होते हैं। – Franck

1
var parts = line.Split(';').Select(p => p.Trim()).Where(p => !string.IsNullOrWhiteSpace(p)).ToArray(); 
संबंधित मुद्दे