अंतिम डैश के दाईं ओर सभी वर्ण प्राप्त करें


114

मेरे पास निम्नलिखित हैं:

string test = "9586-202-10072"

मुझे सभी पात्रों को अंतिम के दाईं ओर कैसे मिलेगा -इसलिए 10072। वर्णों की संख्या हमेशा अंतिम डैश के दाईं ओर अलग होती है।

यह कैसे किया जा सकता है?

जवाबों:


237

आप के -साथ अंतिम की स्थिति प्राप्त कर सकते हैं str.LastIndexOf('-')। तो अगला कदम स्पष्ट है:

var result = str.Substring(str.LastIndexOf('-') + 1);

सुधार :

जैसा कि नीचे ब्रायन बताता है, बिना किसी डैश के स्ट्रिंग पर इसका उपयोग करने से उसी स्ट्रिंग को वापस लौटाया जाएगा।


1
यह तब भी काम करता है जब हाइफ़न अंतिम चरित्र होता है, उस स्थिति में यह सही ढंग से एक खाली स्ट्रिंग लौटाता है। यह केवल तभी विफल होगा जब या तो strअशक्त हो या यदि इसमें एक हाइफ़न न हो। (इस मामले में जहां कोई हाइफ़न नहीं है, यह फेंक नहीं देता है; यह पूरे स्रोत स्ट्रिंग को लौटाता है।)
ल्यूक

@ ल्यूक: सिर के लिए धन्यवाद। मैंने जाँच नहीं की और गलती से यह मान लिया कि यह फेंक देगा।
जॉन

3
खैर, LastIndexOfरिटर्न -1 अगर कुछ नहीं मिला (यह दस्तावेजी व्यवहार है, तो इस पर भरोसा करना सुरक्षित है)। str.Substring(1-1)आप के लिए एक स्ट्रिंग देता है str। कोई आश्चर्य नहीं, यहाँ।
ब्रायन

2
@ ब्रायन: मुझे लगता है कि मैंने एक ही तुच्छ कथन में अधिकांश गलतियों के लिए अपना रिकॉर्ड तोड़ दिया। पाठ: तथ्य के बाद कोड को प्रूफ किए बिना कभी भी कुछ न लिखें। धन्यवाद।
जॉन

57

आप LINQ का उपयोग कर सकते हैं, और अपने आप को स्पष्ट पार्सिंग को बचा सकते हैं:

string test = "9586-202-10072";
string lastFragment = test.Split('-').Last();

Console.WriteLine(lastFragment);

5
यह संभवतः सबसे अधिक डेवलपर समय बचाएगा, लेकिन सामान्य स्थिति में ध्यान दें कि इस तरह का कोड कई स्ट्रिंग आवंटन होगा (शायद ऊपर उदाहरण में चार) इसलिए प्रदर्शन-महत्वपूर्ण अनुभागों में बेरोजगार हो सकता है।
चार्ल्स बर्न्स


4
YourString.Substring(YourString.LastIndexOf("-"));

4
यदि आप अंत में "+ 1" को बाहर करते हैं, तो आउटपुट में स्ट्रिंग के साथ विशेष चरित्र होगा।
मीना

3

मैं देख सकता हूं कि यह पोस्ट 46,000 से अधिक बार देखी गई थी। मैं शर्त लगा सकता हूं कि 46,000 दर्शकों में से कई इस सवाल को केवल इसलिए पूछ रहे हैं क्योंकि वे केवल फ़ाइल नाम चाहते हैं ... और ये उत्तर एक खरगोश छेद हो सकते हैं यदि आप साइन इन का उपयोग करके अपने विकल्प क्रिया को नहीं कर सकते हैं।

यदि आप बस फ़ाइल नाम प्राप्त करना चाहते हैं, तो एक सरल उत्तर है जिसका उल्लेख यहां किया जाना चाहिए। भले ही यह सवाल का सटीक जवाब न हो।

result = Path.GetFileName(fileName);

देख https://msdn.microsoft.com/en-us/library/system.io.path.getfilename(v=vs.110).aspx




1
string atest = "9586-202-10072";
int indexOfHyphen = atest.LastIndexOf("-");

if (indexOfHyphen >= 0)
{
    string contentAfterLastHyphen = atest.Substring(indexOfHyphen + 1);
    Console.WriteLine(contentAfterLastHyphen );
}

0

मैंने इसके लिए एक स्ट्रिंग एक्सटेंशन बनाया, आशा है कि यह मदद करता है।

public static string GetStringAfterChar(this string value, char substring)
    {
        if (!string.IsNullOrWhiteSpace(value))
        {
            var index = value.LastIndexOf(substring);
            return index > 0 ? value.Substring(index + 1) : value;
        }

        return string.Empty;
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.