আমি কীভাবে একটি লাইনের সমস্ত অংশগুলিতে একটি স্ট্রিংকে বিভক্ত এবং ছাঁটাতে পারি?


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();

এফওয়াইআই, ফরচ পদ্ধতিটি প্যারামিটারের জন্য একটি অ্যাকশন নেয় (টি নেয় এবং বাতিল বাতিল করে) এবং আপনার ল্যাম্বডা স্ট্রিং হিসাবে একটি স্ট্রিং ফিরে আসে।

ফরচ এক্সটেনশন পদ্ধতিটি হ'ল সংগ্রহের মধ্যে থাকা অবজেক্টের অবস্থা পরিবর্তন করতে ify স্ট্রিং যেমন পরিবর্তনযোগ্য, তাই এর কোনও প্রভাব নেই have

আশা করি এটি সাহায্য করে; ও)

সেডরিক


3
দ্রষ্টব্য: ForEachকোনও এক্সটেনশন পদ্ধতি নয়।
গুফা

লিনকের সেরা সমাধান!
সোনহজা

যদি কোনও মান না থাকে তবে কী তা বাতিল হয়ে যায়?
দেমদাভে

যদি লাইনটি নাল হয় তবে আপনি একটি ব্যতিক্রম পান। যদি লাইনে 'অন্তর্ভুক্ত না থাকে;' ট্রিমমিড লাইনের সাথে সম্পর্কিত একটি স্ট্রিং সহ আপনার একটি তালিকা থাকবে
সিড্রিক রুপ

22

ForEachপদ্ধতি কিছু ফেরত না, তাই আপনি যদি একটি পরিবর্তনশীল যে দায়িত্ব অর্পণ করতে পারবে না।

ব্যবহার করুন Selectপরিবর্তে এক্সটেনশন পদ্ধতি:

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


3

বিকল্পভাবে এটি চেষ্টা করুন:

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

এটি দুর্দান্ত ধারণা, তবে আমি বিশ্বাস করি যে স্ট্রিংয়ের শেষে কোনও পেছনের ফাঁকা জায়গাটি মিস হয়েছে, তাই না?
জ্রিভিউ

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

রিজেক্স ব্যবহার করে দেখুন:

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());

ফলাফল:

দোলক

জন

মানুষ

ফ্রান্সিস

লুক

আচ্ছাদন

দোলক

প্যাটার্নটি ব্যাখ্যা করুন [,; \ s]: এর মধ্যে দুটির সাথে একটির মিল; বা স্থানের অক্ষর

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.