删除字符串的最后一个字符

我在一个列表中检索了很多信息,链接到一个数据库,我想创建一个组的字符串,为连接到网站的人。

我用这个来测试,但它不是动态的,所以它真的很糟糕:

string strgroupids = "6";

我现在想用这个。但是返回的字符串类似1,2,3,4,5,

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


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

我想在5之后删除,,但它肯定不起作用。

583309 次浏览

删除任何尾随逗号:

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

不过,这是反向的,您首先编写了添加逗号的代码。你应该使用string.Join(",",g)代替,假设gstring[]。给它一个比g更好的名字!

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

MSDN:

String.Remove (Int32):

从指定字符开始删除该字符串中的所有字符 位置并继续到最后一个位置

这样做怎么样

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

很多清洁器。

它将在groupIds中添加所有元素,每个元素之间都有',',但不会在结尾添加','

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)。

使用一些LINQ:

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

没有end-substringing:

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

除了为每一项添加逗号之外,还可以使用String。加入:

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

这将为数组中的每个元素添加分隔符(在本例中为“,”)之间的

c#中的字符串是不可变的。当在代码中执行strgroupids.TrimEnd(',');strgroupids.TrimEnd(new char[] { ',' });时,strgroupids字符串未修改

你需要做一些类似strgroupids = strgroupids.TrimEnd(',');的事情。

引用在这里:

字符串是不可变的——字符串对象的内容是不可变的 对象创建后更改,尽管语法使其更改 表现得好像你能做到。例如,当你写这段代码时, 编译器实际上创建了一个新的字符串对象来保存new 字符序列,新对象被赋值给b 字符串"h"符合垃圾回收条件

sll的解决方案:最好是修剪字符串,以防在结尾有一些空白。

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

添加一个扩展方法。

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

string.Join更好,但如果你真的想要一个LINQ ForEach:

var strgroupids = string.Empty;


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


strgroupids += g;
});

一些注意事项:

  • string.Joinforeach都比这个慢得多的方法好
  • 不需要删除最后一个,,因为它从未被追加
  • 增量操作符(+=)用于向字符串追加操作
  • .ToString()是不必要的,因为它会在连接非字符串时自动调用
  • 当处理大字符串时,应该考虑StringBuilder而不是连接字符串

没有“快速和肮脏”;这样做。我通常这样做:

mystring= string.Concat(mystring.Take(mystring.Length-1));

在c# 8中引入了范围和索引,为我们提供了一个新的更简洁的解决方案:

strgroupids = strgroupids[..^1];

该代码删除字符串中的最后一个字符

string myString = "Hello;";
myString = myString.Remove(myString.Length-1);

输出

你好