如何删除 C # 中字符串的最后一个字符?

以下面的方式为发送请求构建字符串,

  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 # 删除 绳子中的最后一个字符?

126103 次浏览

I would just not add it in the first place:

 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();
string source;
// source gets initialized
string dest;
if (source.Length > 0)
{
dest = source.Substring(0, source.Length - 1);
}

It's good practice to use a StringBuilder when concatenating a lot of strings and you can then use the Remove method to get rid of the final character.

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

Personally I would go with Rob's suggestion, but if you want to remove one (or more) specific trailing character(s) you can use TrimEnd. E.g.

paramstr = paramstr.TrimEnd('&');

build it with string.Join instead:

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

string.Join takes a seperator ("&") and and array of strings (parameters), and inserts the seperator between each element of the array.

It's better if you use 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);
}

Try this:

paramstr.Remove((paramstr.Length-1),1);
string str="This is test string.";
str=str.Remove(str.Length-1);
paramstr.Remove((paramstr.Length-1),1);

This does work to remove a single character from the end of a string. But if I use it to remove, say, 4 characters, this doesn't work:

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

As an alternative, I have used this approach instead:

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

Add a 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;
}

then use:

yourStringBuilder.RemoveLast(",");