স্ট্রিংয়ের শেষ চরটি মুছুন


259

আমি একটি তালিকায় প্রচুর তথ্য উদ্ধার করছি, একটি ডাটাবেসের সাথে লিঙ্ক করেছি এবং ওয়েবসাইটের সাথে যুক্ত এমন ব্যক্তির জন্য আমি একটি গোষ্ঠী তৈরি করতে চাই।

আমি এটি পরীক্ষার জন্য ব্যবহার করি তবে এটি গতিশীল নয়, সুতরাং এটি সত্যই খারাপ:

string strgroupids = "6";

আমি এখন এটি ব্যবহার করতে চাই। স্ট্রিংটি ফিরে এসেছে এমন কিছু1,2,3,4,5,

groupIds.ForEach((g) =>
{
    strgroupids = strgroupids  + g.ToString() + ",";
    strgroupids.TrimEnd(',');
});

strgroupids.TrimEnd(new char[] { ',' });

আমি এর ,পরে মুছতে চাই 5তবে এটি অবশ্যই কাজ করছে না।


9
সরাসরি সমস্যার সমাধান strgroupids = strgroupids.TrimEnd(new char[] { ',' });তবে নীচে আরও ভাল ধারণা রয়েছে।
হেনক হলটারম্যান

উত্তর:


613
strgroupids = strgroupids.Remove(strgroupids.Length - 1);

দুটিই MSDN:

String.Remove (Int32):

এই স্ট্রিং থেকে সমস্ত নির্দিষ্ট অক্ষর মুছে ফেলা একটি নির্দিষ্ট অবস্থানে এবং শেষ অবস্থানের মাধ্যমে অবিরত


1
আপনি শেষের চরটি মুছতে চাইলে সর্বশেষ চরটি অপসারণ করার জন্য উপযুক্ত। ওপি-র প্রশ্নের জন্য, যদি আপনি একটি অনুসরণীয় চর তৈরি না করেন তবে সমস্যাটি থাকা উচিত নয়। আপনি যদি ওপির নৌকোটিতে থাকেন তবে @ আইভিন্দ ব্রুথিন সমাধানটি পরীক্ষা করে দেখুন।
এওলসডিজ কোডিড্যাকট.কম

86

এইভাবে এটি সম্পর্কে কি

strgroupids = string.Join( ",", groupIds );

একটি অনেক ক্লিনার।

এটি প্রতিটি মধ্যে groupIdsএকটি সঙ্গে অভ্যন্তরীণ সমস্ত উপাদান সংযোজন করা হবে ',', কিন্তু এটি একটি ','শেষ করা হবে না ।


4
কেবল সি # 4.0 এ। সি # 3.5 তে আপনাকে গ্রুপআইডসকে অ্যারেতে রূপান্তর করতে হবে।
xanatos

3
এটি ওপি সমস্যা সমাধান করবে।
এওলসডিজ কোডিডেক্ট.কম

29

সি # তে স্ট্রিংগুলি পরিবর্তনযোগ্য। যখন আপনার কোডে আপনাকে যা করতে strgroupids.TrimEnd(',');বা স্ট্রিং পরিবর্তন করা হয়strgroupids.TrimEnd(new char[] { ',' });strgroupids

strgroupids = strgroupids.TrimEnd(',');পরিবর্তে আপনার মতো কিছু করা দরকার ।

এখান থেকে উদ্ধৃতি দিতে :

স্ট্রিংগুলি পরিবর্তনযোগ্য - বস্তুটি তৈরি হওয়ার পরে একটি স্ট্রিং অবজেক্টের সামগ্রী পরিবর্তন করা যায় না, যদিও সিনট্যাক্সটি এটিকে এমন করে তোলে যেন আপনি এটি করতে পারেন। উদাহরণস্বরূপ, আপনি এই কোডটি লেখার সময়, সংকলকটি আসলে অক্ষরের নতুন ক্রম ধরে রাখতে একটি নতুন স্ট্রিং অবজেক্ট তৈরি করে এবং সেই নতুন অবজেক্টটি বি কে নির্ধারিত করা হয়। স্ট্রিং "এইচ" এর পরে আবর্জনা সংগ্রহের জন্য উপযুক্ত।


11

একটি এক্সটেনশন পদ্ধতি যুক্ত করুন।

public static string RemoveLast(this string text, string character)
{
    if(text.Length < 1) return text;
    return text.Remove(text.ToString().LastIndexOf(character), character.Length);
}

তারপরে ব্যবহার করুন:

yourString.RemoveLast(",");

এক্সটেনশন পদ্ধতি তৈরির প্রাথমিক ধারণাটি ভাল। তবে আইএমএইচও, এখানে প্রয়োগ করা পদ্ধতিটি এই ব্যবহারের জন্য ওভারকিল। ওপি জানতেন যে তিনি যে চরিত্রটি চেয়েছিলেন সেটি স্ট্রিংয়ের শেষে ছিল, সুতরাং লাস্ট ইন্ডেক্সফের মাধ্যমে সেই স্ট্রিংটি অনুসন্ধান করার ব্যয় করার কোনও কারণ নেই । কেবলমাত্র গৃহীত উত্তর নিন এবং এটিকে একটি এক্সটেনশন পদ্ধতি করুন। অথবা int nশেষ করে সরানোর জন্য অক্ষরের সংখ্যাটি প্রবেশ করে সেই উত্তরটিকে সাধারণীকরণ করুন । দ্বিতীয়ত, আপনি শূন্য দৈর্ঘ্যের জন্য পরীক্ষা করেন তবে এটি সমস্ত সম্ভাব্য ব্যতিক্রমগুলি দূর করে না। ভাল হবে না int index = ..LastIndexOf.., তারপর if (index >= 0)
টুলমেকারস্টেভ

তৃতীয়ত, প্যারামিটারটির string characterনাম খারাপ। চতুর্থত, ভবিষ্যতের প্রোগ্রামারদের কাছে এটি তাত্ক্ষণিকভাবে স্পষ্ট নয় যে এটি স্ট্রিংয়ের শেষে অক্ষরগুলি সরিয়ে দিচ্ছে। ওহ অপেক্ষা করুন, এটি অগত্যা তা করছে না। এটি স্ট্রিং অনুসন্ধান করছে। এটি মাঝের কোথাও থেকে সরানো হতে পারে। এখন রক্ষণাবেক্ষণ প্রোগ্রামারকে পদ্ধতির সমস্ত ব্যবহার পরীক্ষা করে দেখতে হবে, কী সম্পাদন করার চেষ্টা করা হয়েছিল তা দেখার জন্য। স্ট্রিংয়ের শেষে থেকে সরানোর এই সাধারণ প্রয়োজনের জন্য কল করার জন্য কোনও ভাল পদ্ধতি নয়। সমস্ত সমালোচনার জন্য দুঃখিত; যে কেউ এই পদ্ধতি অবলম্বন করে তাদের জন্য আমি তা করি তাই তারা বুঝতে পারে।
টুলমেকারস্টেভ

পঞ্চম, প্রশ্নের প্রসঙ্গে, String.TrimEndব্যবহার করা আরও উপযুক্ত হবে। তবে অপেক্ষা করুন, এটি ইতিমধ্যে বিদ্যমান - এবং 3 বছর আগে মূল প্রশ্ন এবং অন্যান্য বেশ কয়েকটি উত্তরে উল্লেখ করা হয়েছিল - নতুন পদ্ধতি আবিষ্কার করার দরকার নেই! আপনার পদ্ধতির সুবিধা কী?
টুলমেকারস্টেভ

7

কোনও চলমান কমাগুলি সরায়:

while (strgroupids.EndsWith(","))
    strgroupids = strgroupids.Substring(0, strgroupids.Length - 1);

এটি পিছনে যদিও, আপনি কোডটি লিখেছেন যা প্রথম স্থানটিতে কমা যুক্ত করেছে। string.Join(",",g)পরিবর্তে আপনার ব্যবহার করা উচিত , ধরে gনেওয়া একটি string[]। এটির চেয়ে আরও ভাল নাম দিন g!


4

প্রতিটি আইটেমের জন্য কমা যোগ করার বিকল্প হিসাবে আপনি কেবল স্ট্রিং ব্যবহার করতে পারেন oin

var strgroupids = String.Join(",",  groupIds);

এই (এই ইনস্ট্যান্সের মধ্যে ",") SEPERATOR যোগ হবে মধ্যে অ্যারের মধ্যে প্রতিটি উপাদান।


3
string strgroupids = string.Empty;

groupIds.ForEach(g =>
{
    strgroupids = strgroupids + g.ToString() + ",";
});

strgroupids = strgroupids.Substring(0, strgroupids.Length - 1);

মনে রাখবেন যে এখানে ব্যবহারকে ForEachসাধারণত "ভুল" হিসাবে বিবেচনা করা হয় (উদাহরণস্বরূপ http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx পড়ুন )

কিছু লিনকিউ ব্যবহার করা:

string strgroupids = groupIds.Aggregate(string.Empty, (p, q) => p + q + ',');
strgroupids = strgroupids.Substring(0, str1.Length - 1);

শেষ-স্ট্রস্ট্রিং ছাড়াই:

string strgroupids = groupIds.Aggregate(string.Empty, (p, q) => (p != string.Empty ? p + "," + q : q.ToString()));

1
@ কেরেনজোনস্টোন string.Joinনিখুঁত যদি আপনার উত্স হিসাবে স্ট্রিংগুলির একটি অ্যারে থাকে বা আপনার সি # 4.0 থাকে
xanatos

3

Sll এর সমাধানে অতিরিক্ত: শেষে কিছু ফাঁকা (গুলি) থাকলে স্ট্রিংটি ছাঁটাই করা ভাল better

strgroupids = strgroupids.Remove(strgroupids.Trim().Length - 1);

2

string.Joinভাল, তবে আপনি যদি সত্যিই একটি লিনকিউ চান ForEach:

var strgroupids = string.Empty;

groupIds.ForEach(g =>
{
    if(strgroupids != string.Empty){
        strgroupids += ",";
    }

    strgroupids += g;
});

কিছু নোট:

  • string.Joinএবং foreachউভয়ই এর চেয়ে ভাল, ব্যাপকভাবে ধীর, পদ্ধতির
  • শেষটি মুছে ফেলার দরকার নেই ,কারণ এটি কখনই সংযুক্ত থাকে না
  • ইনক্রিমেন্ট অপারেটর ( +=) স্ট্রিংগুলিতে সংযুক্ত হওয়ার জন্য কার্যকর
  • .ToString() অযৌক্তিক কারণ এটি অ-স্ট্রিংগুলি সংহত করার সময় স্বয়ংক্রিয়ভাবে বলা হয়
  • বড় স্ট্রিং পরিচালনা StringBuilderকরার সময়, কনটেনেটিং স্ট্রিংয়ের পরিবর্তে বিবেচনা করা উচিত

1
বুগ - ​​যদি পরীক্ষার বিপরীত হওয়া দরকার - হওয়া উচিতif(strgroupids != string.Empty){
টুলমেকারস্টেভ

তবে এমন একটি উত্তর যুক্ত করার জন্য আপনাকে ধন্যবাদ জানায় যা দেখায় যে কীভাবে প্রত্যেকের জন্য অযাচিত "," ছাড়াই স্ট্রিং তৈরি করতে ব্যবহার করতে হবে! মনে রাখবেন যে ল্যাম্বডা তৈরি করার প্রয়োজন নেই এবংForEach ; foreach (var g in groupIds) {ঠিক পাশাপাশি কাজ করে :)
টুলমেকারস্টেভ

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