C # তে অন্য স্ট্রিং দিয়ে একটি স্ট্রিং বিভক্ত করুন


682

আমি Split()স্ট্রিংগুলিকে বিভক্ত করার জন্য পদ্ধতিটি ব্যবহার করছি , তবে আপনি যদি কোনও অক্ষর দ্বারা স্ট্রিং বিভক্ত করে থাকেন তবে এটি কেবল তখনই কাজ করে। stringঅন্য স্ট্রিংকে প্যারামিটার দ্বারা বিভক্ত করার সাথে একটিকে বিভক্ত করার কী উপায় আছে ?

আমি বিভাজনটি একটি ভাগ্য অ্যারে রূপান্তরিত করার চেষ্টা করেছি, কোনও ভাগ্য ছাড়াই।

অন্য কথায়, আমি বিভক্ত করতে চাই string:

THExxQUICKxxBROWNxxFOX

দ্বারা xx, এবং মানগুলি সহ একটি অ্যারে ফিরিয়ে দিন:

দ্য কুইক, ব্রাউন, ফক্স


2
ভবিষ্যতের উদ্বেগের জন্য: নীচের মন্তব্যগুলির মধ্যে একটি আমাকে আগ্রহী তাই আমি স্বীকৃত উত্তরে এটি করার নিরবচ্ছিন্ন (তবে ডান) উপায় সম্পর্কিত সফ্টওয়্যার ইঞ্জিনিয়ারিংয়ের উপর একটি আলোচনা খোলার সিদ্ধান্ত নিয়েছি ।
scharette

উত্তর:


1239

একটি স্ট্রিং দ্বারা বিভক্ত করার জন্য আপনাকে স্ট্রিং অ্যারে ওভারলোড ব্যবহার করতে হবে ।

string data = "THExxQUICKxxBROWNxxFOX";

return data.Split(new string[] { "xx" }, StringSplitOptions.None);

4
আমি আসলে আমার 2 টি কারণে এই উত্তরটি পরিবর্তন করে শেষ করেছি: # 1: আমি যে স্প্লিটগুলি করতে চাই তা পরিচালনা করার জন্য আমাকে পুনরায় ব্যবহার করতে হবে scape আমি লিখছি কোন সত্যিকারের অপ্টিমাইজেশন প্রয়োজন, রেজেক্স স্প্লিট পদ্ধতি ব্যবহার করে জড়িত অতিরিক্ত ওভারহেড উপস্থিত হতে পারে।
ব্র্যান্ডন

7
@ পিটার: সেই পোস্টে জন এটিকে পরামর্শ দিচ্ছেন কারণ পোস্টারে কোনও নির্দিষ্ট ডিলিমিটার নেই; তিনি "একাধিক স্থান" (যার অর্থ 2+) দ্বারা পৃথক স্ট্রিংগুলি বিভক্ত করতে দেখছেন। মানের পরিবর্তে কোনও প্যাটার্ন দিয়ে ডিলিমেট করা স্ট্রিংগুলির জন্য, রেজিএক্স একটি দুর্দান্ত (ভাল, একমাত্র ) বিকল্প। স্থির-মান সীমানার জন্য, এটি অপ্রয়োজনীয় ওভারহেড পরিচয় করিয়ে দেয়। একটি পরীক্ষা চালানোর চেষ্টা করুন; ক্রিয়াকলাপের সংখ্যা বাড়ার সাথে সাথে, রেজিএক্স সমতুল্য হিসাবে 10x ডলার প্রায় নেওয়া শুরু করে । string.Split
অ্যাডাম রবিনসন

9
আমি পাইথন থেকে সি # এ আসি। পাইথন স্ট্রিংটিকে অন্য স্ট্রিং দ্বারা বিভক্ত করে। এবং আমাকে প্রায়শই এই প্রশ্নের সহজ উত্তরটির জন্য ফিরে আসতে হবে string[] Split(string pattern), যা সবচেয়ে প্রাকৃতিক ব্যবহার যা আমি ভাবতে পারি যে এটি এখনও নেই। আমি সি লিখেছিলাম তাই আমি অ্যারে চার্জে অভ্যস্ত হয়েছি তবে আমি এখনও char[]সি # কোডে পপ আপ দেখতে ঘৃণা করি কারণ এটি হঠাৎ আমার দৃষ্টি স্ট্রিম স্তর থেকে বাইট স্তর পর্যন্ত টানছে। কেও জানেন যে সি # লাইব্রেরি ছেলেরা এইভাবে স্প্লিট পদ্ধতিটি ডিজাইন করেছিল? যদি কোনও ভাল কারণ থাকে তবে আমি অসুবিধা থাকা সত্ত্বেও সম্ভবত প্রশংসা করার চেষ্টা করতে পারি।
চূড়ান্তভাবে

11
এই স্নিপেট নন সি # বিকাশকারীদের দেখাতে লজ্জা পাবে এমন জিনিসের তালিকায় খুব বেশি।
ট্রুবেনফুচস

99
কেন আমরা ঠিক করতে পারি না data.Split("xx")?
এমকন্ট

122

স্প্লিটের একটি ওভারলোড রয়েছে যা স্ট্রিং নেয়।

"THExxQUICKxxBROWNxxFOX".Split(new [] { "xx" }, StringSplitOptions.None);

আপনি এই স্ট্রিংস্প্লিটঅપ્শনগুলির কোনওটিই ব্যবহার করতে পারেন

  • কিছুই নয় - ফেরতের মানটিতে অ্যারে উপাদানগুলি থাকে যা খালি স্ট্রিং ধারণ করে
  • সরানএম্পটিইন্ট্রি - ফিরতি মানটিতে অ্যারে উপাদানগুলি অন্তর্ভুক্ত থাকে না যা খালি স্ট্রিং ধারণ করে

সুতরাং স্ট্রিংটি যদি "থেএক্সএক্সএইউএইচএইচএলিকএক্সএক্সএক্সএক্সএক্সএক্সএক্সব্রোএনএক্সএক্সএক্সএফএক্সএক্স" হয়, তবে "এক্সএক্সএক্সএক্সএক্স StringSplitOptions.None" অংশের জন্য অ্যারেতে একটি খালি এন্ট্রি ফিরে আসবে যখন StringSplitOptions.RemoveEmptyEntriesনা হয়।


73
Regex.Split(string, "xx")

আমি সাধারণত এটি করি।


অবশ্যই আপনার প্রয়োজন:

using System.Text.RegularExpressions;

বা:

System.Text.RegularExpressions.Regex.Split(string, "xx")

তবে তারপরে আবার আমার সেই লাইব্রেরিটি সর্বদা প্রয়োজন।


13
@ ব্র্যান্ডন: আমি সাধারণত অকাল অপটিমাইজেশনের বিরুদ্ধে সাবধান করছি, আপনি সচেতন হওয়া উচিত যে নিয়মিত এক্সপ্রেশন ওভারহেডের কারণে RegEx.Splitএকটি সাধারণের চেয়ে কিছুটা বেশি ব্যয়বহুল String.Split
অ্যাডাম রবিনসন

9
আপনি যদি একটি স্বেচ্ছাসেবী স্ট্রিং দ্বারা বিভক্ত করতে চান, Regex.Escapeপ্রথমে স্ট্রিংটিতে ব্যবহার করুন, এটি কোনও রেজেক্স মেটা-অক্ষরগুলি এড়িয়ে যাবে।
রিচার্ড

ওভারহেডের জন্য মূল্য দিতে পারে এমন অন্যতম প্রধান সুবিধা হ'ল স্ট্রিং তুলনা সেটিং সরবরাহ করার ক্ষমতা
তৈমুর সাদ্যকভ


25

আমি সাধারণত এর জন্য আমার নিজের এক্সটেনশনটি ব্যবহার করতে চাই:

string data = "THExxQUICKxxBROWNxxFOX";
var dataspt = data.Split("xx");
//>THE  QUICK  BROWN  FOX 


//the extension class must be declared as static
public static class StringExtension
{   
    public static string[] Split(this string str, string splitter)
    {
        return str.Split(new[] { splitter }, StringSplitOptions.None);
    }
}

তবে মাইক্রোসফ্ট যদি এই পদ্ধতি-ওভারলোডটিকে পরবর্তী সংস্করণগুলিতে অন্তর্ভুক্ত করার সিদ্ধান্ত নেয় তবে এটি একটি ব্যতিক্রম ঘটায়। এরই মধ্যে মাইক্রোসফ্ট এই পদ্ধতিটি অন্তর্ভুক্ত না করারও সম্ভবত কারণ: আমি কমপক্ষে একটি সংস্থার জন্য কাজ করেছি যা তাদের সমস্ত সি # প্রকল্পে এই জাতীয় এক্সটেনশন ব্যবহার করেছিল।

রানটাইমে পদ্ধতিটি উপস্থিত না থাকলে শর্তসাপেক্ষে এটি সংজ্ঞায়িত করাও সম্ভব হতে পারে।


4
অন্যথা, ব্যবহার params string[] splitterদ্বিতীয় প্যারামিটারটি এবং পরিবর্তন যেমন new[] {splitter}করতে splitterএকাধিক বিভেদক সমর্থন।
ম্যাথু স্ট্রব্রিজ ব্রিজ

10

পূর্ববর্তী উত্তরগুলি সমস্ত সঠিক। আমি আরও একধাপ এগিয়ে চলেছি এবং স্ট্রিংয়ের উপর একটি এক্সটেনশন পদ্ধতিটি সংজ্ঞায়িত করে সি # আমার জন্য কাজ করুন:

public static class Extensions
{
    public static string[] Split(this string toSplit, string splitOn) {
        return toSplit.Split(new string[] { splitOn }, StringSplitOptions.None);
    }
}

এইভাবে আমি এটিকে যে কোনও স্ট্রিংয়ে সহজ ভাবে কল করতে পারি আমি নির্বাকভাবে প্রথমবারের মতো এটি সম্পাদন করার চেষ্টা করেছি:

"a big long string with stuff to split on".Split("g str");

9

.NET কোর 2.0 হিসাবে, সেখানে একটি ওভাররাইড রয়েছে যা স্ট্রিং নেয়।

সুতরাং এখন আপনি করতে পারেন "THExxQUICKxxBROWNxxFOX".Split("xx")

Https://docs.microsoft.com/en-us/dotnet/api/system.string.split?view=netcore-2.0# সিস্টেমে_স্ট্রিং_স্প্লিট_সিস্টেম_সেট্রিং_সিস্টেম_স স্ট্রিংস্প্লিটঅপশন_ দেখুন


7
string data = "THExxQUICKxxBROWNxxFOX";

return data.Replace("xx","|").Split('|');

কেবল প্রতিস্থাপনের অক্ষরটি সাবধানতার সাথে বেছে নিন (এমন একটি চয়ন করুন যা ইতিমধ্যে স্ট্রিংটিতে উপস্থিত নাও হতে পারে)!


2
@ মাসাউদ হোসেইনি: দয়া করে পুরো উত্তরটি পড়ুন; ইতিমধ্যে একটি অস্বীকৃতি আছে।
এসএনএগ

3
@ কোবে: কারণ এটি একটি ভয়ানক হ্যাক।
ওভারভিউ

3
দুর্দান্ত কাজ করে তবে জেনেরিক পদ্ধতির জন্য এটি বিপজ্জনক
কাইজনোরো

5
"এটি একটি ভয়ঙ্কর হ্যাক" বা "খারাপ উত্তর" এর মতো ব্যাখ্যা পোস্ট করা সহায়ক নয়। এটি কেবল ব্যাখ্যা ছাড়াই একটি মতামত। পরিবর্তে, "এটি উভয়ই প্রতিস্থাপনের জন্য স্ট্রিং স্ক্যান করা অপ্রয়োজনীয় এবং এরপরে বিভক্ত অক্ষরগুলির জন্য স্ক্যান করা যেহেতু এটি খারাপ পারফরম্যান্সের দিকে নিয়ে যায়" " নিজেকে বোঝানোর আরও ভাল উপায় হবে। প্রচুর প্রোগ্রামাররা এভাবে অভিনয় করে। :(
ম্যাট রুয়ে

1
স্ট্রিংটিতে |ইতিমধ্যে চর থাকলে কী হয় , এই কারণে আমি মনে করি এটি ব্যবহার করা বিপজ্জনক।
amd

-1

এটিও সহজ:

string data = "THExxQUICKxxBROWNxxFOX";
string[] arr = data.Split("xx".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

1
তবে এটি সেখানেও বিভক্ত হবে "THExQUICK"যেখানে আমরা এটি বিভক্ত হওয়া চাই না
রাফালন

ধন্যবাদ রাফালন: হ্যাঁ, গ্রেগের সেরা উত্তর: ডেটা.স্প্লিট (নতুন স্ট্রিং [] {"এক্সএক্স"}, স্ট্রিংস্প্লিটঅপশনস. রিমোভ এম্পটিইন্ট্রি)
ইউজার ৮8০২৫৫

-4

সবচেয়ে সহজ উপায়টি হ'ল String.Replace:

string myString = "THExxQUICKxxBROWNxxFOX";
mystring = mystring.Replace("xx", ", ");

বা আরও সহজভাবে:

string myString = "THExxQUICKxxBROWNxxFOX".Replace("xx", ", ");

3
যেমনটি রয়েছে, এটি কোনও অ্যারে ফিরিয়ে দেবে না (যেমন প্রশ্ন জিজ্ঞাসা করা হয়েছে), ঠিক যেখানে কমা ছিল সেখানে একটি স্ট্রিং xx
আরজ

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