मैं कैसे एक लाइन में सभी भागों में एक स्ट्रिंग को विभाजित और ट्रिम कर सकता हूं?


124

मैं इस लाइन को विभाजित करना चाहता हूं:

string line = "First Name ; string ; firstName";

उनके छंटे हुए संस्करणों की एक सरणी में:

"First Name"
"string"
"firstName"

मैं यह सब एक लाइन पर कैसे कर सकता हूं? निम्नलिखित मुझे एक त्रुटि देता है "प्रकार शून्य नहीं बदल सकता है":

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

2
त्रुटि वापस आ गई है क्योंकि ForEachवर्तमान आवृत्ति IEnumerableऔर रिटर्न पर काम करता है void
मजकेल

जवाबों:


291

प्रयत्न

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

FYI करें, Foreach विधि पैरामीटर के लिए एक एक्शन (T और रिटर्न शून्य लेता है) लेता है, और आपका लैम्ब्डा स्ट्रिंग के रूप में एक स्ट्रिंग लौटाता है। एक स्ट्रिंग लौटाएं

फॉर्च्यूनर एक्सटेंशन विधि संग्रह के भीतर वस्तुओं की स्थिति को संशोधित करने के लिए है। जैसा कि स्ट्रिंग अपरिवर्तनीय है, इसका कोई प्रभाव नहीं होगा

आशा है कि यह मदद करता है; ओ)

सिडरिक


3
नोट: ForEachविस्तार विधि नहीं है।
गुफ़ा

Linq में सबसे अच्छा समाधान!
सोनहजा

क्या होगा अगर कोई मूल्य नहीं हैं, तो यह अशक्त हो जाता है?
डिमोदावे

यदि रेखा शून्य है तो आपको एक अपवाद मिलेगा। अगर लाइन में शामिल नहीं है ';' आपके पास ट्रिममिड लाइन के लिए एक स्ट्रिंग के साथ एक सूची होगी
सेड्रिक रूप

22

ForEachविधि कुछ भी वापस नहीं करता है, तो आप एक चर है कि नहीं सौंप सकते।

Selectइसके बजाय विस्तार विधि का उपयोग करें :

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

5

क्योंकि p.Trim () एक नया स्ट्रिंग लौटाता है।

आपको उपयोग करने की आवश्यकता है:

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

3

वैकल्पिक रूप से यह प्रयास करें:

string[] parts = Regex.Split(line, "\\s*;\\s*");

यह एक महान विचार है, हालांकि, मेरा मानना ​​है कि स्ट्रिंग के अंत में किसी भी अनुगामी रिक्त स्थान को याद करता है, सही है?
'18:

3

यहाँ एक विस्तार विधि है ...

    public static string[] SplitAndTrim(this string text, char separator)
    {
        if (string.IsNullOrWhiteSpace(text))
        {
            return null;
        }

        return text.Split(separator).Select(t => t.Trim()).ToArray();
    }

2

Regex का उपयोग करके देखें:

List<string> parts = System.Text.RegularExpressions.Regex.Split(line, @"\s*;\s*").ToList();

0

स्प्लिट रिटर्न स्ट्रिंग [] प्रकार। एक विस्तार विधि लिखें:

public static string[] SplitTrim(this string data, char arg)
{
    string[] ar = data.Split(arg);
    for (int i = 0; i < ar.Length; i++)
    {
        ar[i] = ar[i].Trim();
    }
    return ar;
}

मुझे आपका समाधान पसंद आया इसलिए मैंने इसे जोड़ने और इसे और अधिक उपयोगी बनाने का फैसला किया।

public static string[] SplitAndTrim(this string data, char[] arg)
{
    return SplitAndTrim(data, arg, StringSplitOptions.None);
}

public static string[] SplitAndTrim(this string data, char[] arg, 
StringSplitOptions sso)
{
    string[] ar = data.Split(arg, sso);
    for (int i = 0; i < ar.Length; i++)
        ar[i] = ar[i].Trim();
    return ar;
}

-1

Regex का उपयोग करें

string a="bob, jon,man; francis;luke; lee bob";
			String pattern = @"[,;\s]";
            String[] elements = Regex.Split(a, pattern).Where(item=>!String.IsNullOrEmpty(item)).Select(item=>item.Trim()).ToArray();;			
            foreach (string item in elements){
                Console.WriteLine(item.Trim());

परिणाम:

बॉब

जॉन

आदमी

फ्रांसिस

ल्यूक

ली

बॉब

पैटर्न की व्याख्या करें; [?]; या अंतरिक्ष चरित्र

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