সি # তে একটি স্ট্রিংয়ে শেষ চরিত্রটি কীভাবে মুছবেন?


94

নিম্নলিখিত অনুরোধের জন্য পোস্ট অনুরোধের জন্য একটি স্ট্রিং তৈরি করা,

  var itemsToAdd = sl.SelProds.ToList();
  if (sl.SelProds.Count() != 0)
  {
      foreach (var item in itemsToAdd)
      {
        paramstr = paramstr + string.Format("productID={0}&", item.prodID.ToString());
      }
  }

আমি ফলাফল পাওয়ার পরে paramstr, আমার &এটিতে শেষ চরিত্রটি মুছতে হবে

C # ব্যবহার করে কোনও স্ট্রিংয়ে শেষ অক্ষরটি কীভাবে মুছবেন ?


4
অনুমান করুন যে এটি কেবল প্রথম স্থানে যুক্ত না করা ভাল, তবে অন্যথায় আপনি প্যারামস্ট্রার সাবস্ট্রিং (0, প্যারামস্ট্রার লেন্থ - 1) চেষ্টা করতে পারেন
জ্যাকো প্রিটোরিয়াস

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

উত্তর:


75

string.Joinপরিবর্তে এটি তৈরি করুন:

var parameters = sl.SelProds.Select(x=>"productID="+x.prodID).ToArray();
paramstr = string.Join("&", parameters);

string.Joinএকটি পৃথক ( "&") এবং স্ট্রিংগুলির অ্যারে ( ) নেয় এবং অ্যারের parametersপ্রতিটি উপাদানগুলির মধ্যে পৃথককে সন্নিবেশ করায়।


4
আপনি যদি স্ট্রিংয়ের শেষে কোনও & সাইন রাখতে না চান তবে এটি সহায়ক not
আম্মার

আমি জানতাম যে এটি রুবিতে ছিল, কোনও ধারণা ছিল না এটি সি # তে ছিল এবং আমি একজন নেট দেব। আমি খুব লজ্জা বোধ করছি
জ্যাক মারচেটি

আমি বিশ্বাস করতে পারি না যে এটি নির্বাচিত উত্তর ছিল ... @ ব্রায়ানআরসমুসেনের ঠিক নীচের উত্তরটি এত সহজ।
ফাস্টট্র্যাক

@ ফাস্টট্র্যাক এটি শিরোনামে প্রশ্নের উত্তর বনাম মূল সমস্যার সমাধান করেছে। আমার অভিযোগ: আপনি যদি সাবলীল হতে চলেছেন তবে কেন সব কিছু এক লাইনে করবেন না।
গ্রাহাম

241

ব্যক্তিগতভাবে আমি রবের পরামর্শ নিয়ে যাব, তবে আপনি যদি কোনও (বা ততোধিক) নির্দিষ্ট ট্রেলিং চরিত্র (গুলি) অপসারণ করতে চান তবে আপনি ব্যবহার করতে পারেন TrimEnd। যেমন

paramstr = paramstr.TrimEnd('&');

15
সচেতন থাকুন যে ট্রিমইন্ড সেই চরিত্রের সমস্ত চলমান ঘটনা '&' মুছে ফেলবে ... সুতরাং যদি স্ট্রিংটি '&&&' দিয়ে শেষ হয় তবে ট্রিমেন্ড কেবল শেষের নয়, '&' এর সমস্ত 3টিকে সরিয়ে ফেলবে। ওপি যা চায় তা হতে পারে বা নাও পারে।
ডগ এস

4
@ ডগস এফডাব্লুআইডাব্লু আমি লেখককে "একটি (বা আরও) মুছে ফেলুন" করেছিলেন।
ব্রায়ান রাসমুসেন

একটি সহজ সমাধানের জন্য +1, এটি সহজেই অন্যান্য সমস্যার জন্য একটি উপাদান হিসাবে ব্যবহার করা যেতে পারে। আমি ডাবল বা অনুপস্থিত স্ল্যাশ না পেয়ে তা নিশ্চিত করে একাধিক অংশ থেকে পথ তৈরির সমাধান অনুসন্ধান করছিলাম। এই কৌশলটির সাথে ট্রিমেন্ড এবং ট্রিমস্টার্টের সমন্বয় এটি নিশ্চিত করে।
জোপ্পি

4
@ জোপ্পি: ব্যবহারের পরামর্শ দিন Path.Combine, যা সমস্ত পথ বিভাজককে বোঝে। সর্বনিম্ন রাস্তা ব্যবহার করে Trimযা একসাথে শুরু এবং শেষ হয়।
নাইজেল টাচ

@ পথের সাথে আমার যে সমস্যা রয়েছে তা নিগেল করুন omb কোম্বাইন হ'ল দ্বিতীয় যুক্তিটি যদি স্ল্যাশ দিয়ে শুরু হয় তবে এটি একটি পরম পথ হিসাবে ব্যাখ্যা করা হয় এবং ফলাফলটি পরম পথ; এটি আমার কোড থেকে কল করা লোকেদের 'সংরক্ষণ' করতে পছন্দ করে।
ট্রিমের


15

এটা চেষ্টা কর:

paramstr.Remove((paramstr.Length-1),1);

4
আপনি কি আপনার উত্তরটি কিছুটা ব্যাখ্যা করার বিষয়ে বিবেচনা করবেন, যাতে অন্যরা যারা আসে সেগুলি কেন আপনি এটির পরামর্শ দিয়েছিলেন সে সম্পর্কে আরও ভাল ধারণা থাকতে পারে?
অ্যান্ড্রু বারবার

4
@ অ্যালতাফ প্যাটেলের উত্তরটি স্ট্রিংয়ের পদ্ধতিটি ব্যবহার করে। সরানোর পদ্ধতি (আন্তঃ 32) যা এই পরিস্থিতিতে তর্কযোগ্যভাবে আরও সহজ straight তবে স্ট্রিংয়ের সম্পর্কে জানা ভাল em সরানোর পদ্ধতি (Int32, Int32) যা উত্সের স্ট্রিংয়ের মধ্যে যে কোনও জায়গা থেকে স্বেচ্ছাসেবী দৈর্ঘ্যের একটি স্ট্রিংকে ট্রিম করার ক্ষমতা সরবরাহ করে।
ডেভিডআরআর

13

আমি এটি প্রথম স্থানে যুক্ত করতে চাই না:

 var sb = new StringBuilder();

 bool first = true;
 foreach (var foo in items) {
    if (first)
        first = false;
    else
        sb.Append('&');

    // for example:
    var escapedValue = System.Web.HttpUtility.UrlEncode(foo);

    sb.Append(key).Append('=').Append(escapedValue);
 }

 var s = sb.ToString();

আমি এই স্নিপেটের পঠনযোগ্যতা সম্পর্কে কিছু বলব না, তবে আমি এটি এইভাবে করব।
ম্যাটি ভির্ককুনেন

4
লুপটি সম্পন্ন হওয়ার পরে স্ট্রিংবিল্ডারের দৈর্ঘ্য একের সাথে সংক্ষিপ্ত করে নেওয়া সহজ এবং সহজ।
ম্যাট গ্রেয়ার

এটি মুছে ফেলার পরিবর্তে এটি যুক্ত না করার জন্য, + = এর পরিবর্তে স্ট্রিংবিল্ডার ব্যবহার করার জন্য, এবং সংযুক্তকরণ এবং সংযোজন পরিবর্তে অ্যাপেনডগুলি শৃঙ্খলাবদ্ধ করার জন্য +1 :)
গুফা

4
এই সমাধানটির সাথে সমস্যাটি হ'ল "যদি" অপারেটরটিকে "এন" বার বলা হয়।
Magallanes


7

আপনি যদি এটি ব্যবহার করেন তবে এটি আরও ভাল string.Join

 class Product
 {
   public int ProductID { get; set; }
 }
 static void Main(string[] args)
 {
   List<Product> products = new List<Product>()
      {   
         new Product { ProductID = 1 },
         new Product { ProductID = 2 },
         new Product { ProductID = 3 }
      };
   string theURL = string.Join("&", products.Select(p => string.Format("productID={0}", p.ProductID)));
   Console.WriteLine(theURL);
 }

আপনি .ToArray()আপনার Joinবিবৃতিতে অনুপস্থিত । যদিও +1 আমাকে সাহায্য করে ছিল.
ওয়ান-ওয়ান

4
@desaivv: না, আমি এই জমিদার ব্যবহার করছিলেন: public static string Join<T>(string separator, IEnumerable<T> values), নতুন সি # 4.0 :) এর
চেঙ চেন

আহ আমার খারাপ। এখনও 3.0 সহ VS2008 ব্যবহার করছেন
ওয়ান-ওয়ান

5

StringBuilderঅনেকগুলি স্ট্রিং যুক্ত করে যখন ব্যবহার করা ভাল হয় তবে আপনি চূড়ান্ত চরিত্র থেকে মুক্তি পেতে অপসারণ পদ্ধতিটি ব্যবহার করতে পারেন।

StringBuilder paramBuilder = new StringBuilder();

foreach (var item in itemsToAdd)
{
    paramBuilder.AppendFormat(("productID={0}&", item.prodID.ToString());
}

if (paramBuilder.Length > 1)
    paramBuilder.Remove(paramBuilder.Length-1, 1);

string s = paramBuilder.ToString();

আমার মনে আছে আপনি paramBuilder.Length - 1শেষ চরিত্রটিও সরাতে ব্যবহার করতে পারেন।
ড্যান ডিপো

1
paramstr.Remove((paramstr.Length-1),1);

এটি স্ট্রিংয়ের শেষে থেকে একটি একক অক্ষর অপসারণ করতে কাজ করে। তবে আমি যদি এটি 4 টি অক্ষর মুছে ফেলার জন্য ব্যবহার করি তবে এটি কার্যকর হয় না:

paramstr.Remove((paramstr.Length-4),1);

বিকল্প হিসাবে, আমি পরিবর্তে এই পদ্ধতির ব্যবহার করেছি:

DateFrom = DateFrom.Substring(0, DateFrom.Length-4);

4
ব্যবহার String.Remove পদ্ধতি (Int32, Int32) , বাদ দিতে 4 একটি স্ট্রিংয়ের শেষ প্রান্ত থেকে অক্ষর: result = source.Remove((source.Length - 4), 4);
ডেভিডআরআর

0

অ্যা StringBuilder extension method

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

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

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