2013-07-16 7 views
5

मैं किसी दिए गए विषम लंबाई स्ट्रिंग के मध्य तीन वर्णों को पुनर्प्राप्त करना चाहता हूं। ईजी। यदिएक विषम लंबाई स्ट्रिंग के बीच तीन वर्ण प्राप्त करना

string original = "India" // expected output - "ndi" 
string original = "America" // expected output - "eri" 

मैंने निम्नलिखित कोड की कोशिश की और यह आवश्यकता के अनुसार काम करता है लेकिन मैं सोच रहा था कि ऐसा करने के लिए कोई बेहतर तरीका है?

public string GetMiddleString (string original) 
{ 
    string trimmed = string.Empty; 
    int midCharIndex = (original.Length/2); 
    if ((original.Length) % 2 != 0) 
    { 
     trimmed = original.Substring (midCharIndex - 1, 3); 
    } 
    else 
    { 
     trimmed = original; 
    } 
    return trimmed; 
} 
+2

'शून्य' पास करना, और एक वर्ण स्ट्रिंग फेंक अपवाद, दो वर्ण स्ट्रिंग गलत परिणाम देता है, और एक 4 वर्ण स्ट्रिंग गलत परिणाम है। – asawyer

+0

@asawyer हां मैं अपवाद हैंडलिंग के साथ और शून्य मूल्यों की जांच के लिए मेरे प्रोजेक्ट में तदनुसार कोड संपादित करूंगा। धन्यवाद। – RahulD

+0

"विषम स्ट्रिंग" क्या है? एक लंबाई के साथ एक विषम संख्या है? आपको क्या लगता है कि आपका कोड केवल ऐसे तारों के साथ बुलाया जाएगा? –

उत्तर

12
बजाय

आप एक त्रिगुट ऑपरेटर

return (!String.IsNullOrEmpty(original) 
     && original.Length % 2 != 0 
     && original.Length >= 3) 
    ? original.Substring((original.Length/2) - 1, 3) 
    : original; 

जो विधि की जरूरत के अंदर केवल कोड होगा इस्तेमाल कर सकते हैं यदि। त्रुटि को रोकने के लिए && original.Length >= 3 जोड़ा गया।

+2

एक शून्य जांच का उपयोग कर सकता है। – asawyer

+2

पठनीयता भयानक है। यह एक महान उदाहरण है कि कोड को समझने और बनाए रखने के लिए कोड को वास्तव में कठिन बनाने के लिए टर्नरी ऑपरेटर का दुरुपयोग कैसे किया जा सकता है। – CesarGon

+0

हाँ मैं असहमत नहीं हूं। जवाब केवल मध्य अभिव्यक्ति के रूप में एकमात्र हालत के रूप में शुरू हुआ, और आवश्यकताओं के लिए बढ़ गया। – Jonesopolis

9

यहां मैं क्या आया हूं। ऐसा नहीं है कि यह वास्तव में अपने कोड

public string GetMiddleString(string original) 
{ 
    if (original.Length % 2 != 0 && original.Length >= 3) 
     return original.Substring(original.Length/2 - 1, 3); 
    return original; 
} 

के लिए बहुत कुछ बदल जाता है मैं स्ट्रिंग की लंबाई की जाँच करने के ताकि आप किसी भी अपवाद नहीं मिलता है सुनिश्चित करें चाहते हैं।

+0

यह एक शून्य जांच का भी उपयोग कर सकता है। – asawyer

5

हमेशा LINQ जा सकता है!

if(!string.IsNullOrWhiteSpace(s) && s.Length > 4 && (s.Length % 2) != 0) { 
    return new string(s.Skip((s.Length/2) - 1).Take(3).ToArray()); 
} 
else { return string.Empty; } 
+0

क्या यह कोड जांचता है कि स्ट्रिंग की लंबाई अजीब है या नहीं? – RahulD

+0

@rahuldwivedi अजीब lengthed स्ट्रिंग के लिए चेक जोड़ा गया। –

+0

लंबाई चार से अधिक होने की आवश्यकता क्यों होगी? क्या आप मध्य तीन वर्णों को लंबाई की एक स्ट्रिंग से नहीं ले सकते हैं? इसके अलावा, यह तारों को समाप्त करता है जो सभी सफेद जगह हैं, जो ओपी की आवश्यकताओं में से एक नहीं है। क्या आप शायद 'string.IsNullOrEmpty' का उपयोग करने का मतलब रखते थे? –

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