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

Wes*_*een 77 c# stringbuilder

我有以下内容

data.AppendFormat("{0},",dataToAppend);
Run Code Online (Sandbox Code Playgroud)

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

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

Mik*_*oud 198

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

data.Length--;
Run Code Online (Sandbox Code Playgroud)

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

data.Length = 0;
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为这是因为能够以"流利"的方式使用.`Append`也会自行返回. (11认同)
  • re`data.Length = 0;`:这正是`StringBuilder.Clear`的作用,因此为了清晰起见,最好使用`StringBuilder.Clear`. (2认同)

Vla*_*lad 40

只是用

string.Join(",", yourCollection)
Run Code Online (Sandbox Code Playgroud)

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

  • 最好的答案不是解决问题的方法,而是解决问题的方法. (11认同)
  • @Seabizkit:很奇怪!你能举个例子吗?在我的代码中,它可以完美运行:http://ideone.com/aj8PWR (2认同)
  • 多年使用循环来构建字符串生成器,然后删除结尾的逗号,我本可以使用它。谢谢你的提示! (2认同)

Sam*_*ach 11

循环后使用以下内容.

.TrimEnd(',')
Run Code Online (Sandbox Code Playgroud)

或者只是改为

string commaSeparatedList = input.Aggregate((a, x) => a + ", " + x)
Run Code Online (Sandbox Code Playgroud)

  • 他正在使用StringBuilder而不是字符串.此外它是非常无效的:首先转换为字符串然后修剪. (4认同)

Pan*_*kaj 9

这个怎么样..

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


bas*_*gio 7

我更喜欢操纵stringbuilder的长度:

data.Length = data.Length - 1;
Run Code Online (Sandbox Code Playgroud)

  • 为什么不简单地`data.Length - `或`--data.Length`? (4认同)