从使用stringbuilder构建的字符串中删除最后一个字符的最佳方法

问题描述 投票:71回答:11

我有以下内容

data.AppendFormat("{0},",dataToAppend);

这个问题是我在循环中使用它并且会有一个试用逗号。删除尾随逗号的最佳方法是什么?

我是否必须将数据更改为子串的字符串呢?

c# stringbuilder
11个回答
188
投票

最简单,最有效的方法是执行以下命令:

data.Length--;

通过执行此操作,您可以将指针(即最后一个索引)移回一个字符,但不会更改对象的可变性。事实上,清除StringBuilder最好也使用Length(但实际上使用Clear()方法来清晰,因为这是它的实现看起来像):

data.Length = 0;

再次,因为它不会更改分配表。想想它就像说,我不想再识别这些字节了。现在,即使在调用ToString()时,它也不会识别任何超过其Length的东西,嗯,它不能。它是一个可变对象,分配的空间比你提供的空间多,它只是以这种方式构建。


2
投票

Similar SO question here.

我喜欢使用StringBuilder扩展方法。

RemoveLast Method


1
投票

最简单的方法是使用Join()方法:

public static void Trail()
{
    var list = new List<string> { "lala", "lulu", "lele" };
    var data = string.Join(",", list);
}

如果你真的需要StringBuilder,请在循环后修剪结束逗号:

data.ToString().TrimEnd(',');

36
投票

只是用

string.Join(",", yourCollection)

这样你就不需要StringBuilder和循环了。


10
投票

循环后使用以下内容。

.TrimEnd(',')

或者只是改为

string commaSeparatedList = input.Aggregate((a, x) => a + ", " + x)

8
投票

这个怎么样..

string str = "The quick brown fox jumps over the lazy dog,";
StringBuilder sb = new StringBuilder(str);
sb.Remove(str.Length - 1, 1);

6
投票

我更喜欢操纵stringbuilder的长度:

data.Length = data.Length - 1;

3
投票

我建议你改变你的循环算法:

  • 添加逗号不是在项目之后,而是在之前
  • 使用以false开头的布尔变量会抑制第一个逗号
  • 测试后将此布尔变量设置为true

3
投票

您应该使用string.Join方法将项集合转换为逗号分隔的字符串。它将确保没有前导或尾随逗号,并确保有效构造字符串(没有不必要的中间字符串)。


2
投票

是的,一旦循环完成,将其转换为字符串:

String str = data.ToString().TrimEnd(',');

2
投票

你有两个选择。第一个是非常容易使用Remove方法它是非常有效的。第二种方法是使用ToString与起始指数和结束指数(MSDN documentation

© www.soinside.com 2019 - 2024. All rights reserved.