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