从stringbuilder构build的string中删除最后一个字符的最佳方法

我有以下

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

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

我必须将数据更改为string的子string吗?

最简单和最有效的方法是执行这个命令:

 data.Length--; 

通过这样做,您可以将指针(即最后一个索引)移回一个字符,但不会更改对象的可变性。 实际上,清理StringBuilder最好用Length来完成(但为了清晰起见,实际上使用了Clear()方法,因为这就是它的实现):

 data.Length = 0; 

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

只是使用

 string.Join(",", yourCollection) 

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

循环后使用以下内容。

 .TrimEnd(',') 

或者干脆改成

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

这个怎么样..

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

我更喜欢操纵stringbuilder的长度:

 data.Length = data.Length - 1; 

我build议你改变你的循环algorithm:

  • 不要在项目后面添加逗号,而是在之前
  • 使用一个布尔variables,以false开始,并抑制第一个逗号
  • testing后将此布尔variables设置为true

您应该使用string.Join方法将项目集合转换为以逗号分隔的string。 这将确保没有前导或尾随逗号,以及确保string被有效地构build(没有不必要的中间string)。

你有两个select。 第一个是非常容易使用的Remove方法是相当有效的。 第二种方法是使用带有开始索引和结束索引的ToString ( MSDN文档 )

类似的问题在这里。

我喜欢使用StringBuilder扩展方法。

RemoveLast方法

是的,一旦循环完成,将其转换为string:

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

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

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

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

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