我有以下内容
data.AppendFormat("{0},",dataToAppend);
这个问题是我在循环中使用它并且会有一个试用逗号。删除尾随逗号的最佳方法是什么?
我是否必须将数据更改为子串的字符串呢?
最简单,最有效的方法是执行以下命令:
data.Length--;
通过执行此操作,您可以将指针(即最后一个索引)移回一个字符,但不会更改对象的可变性。事实上,清除StringBuilder
最好也使用Length
(但实际上使用Clear()
方法来清晰,因为这是它的实现看起来像):
data.Length = 0;
再次,因为它不会更改分配表。想想它就像说,我不想再识别这些字节了。现在,即使在调用ToString()
时,它也不会识别任何超过其Length
的东西,嗯,它不能。它是一个可变对象,分配的空间比你提供的空间多,它只是以这种方式构建。
最简单的方法是使用Join()方法:
public static void Trail()
{
var list = new List<string> { "lala", "lulu", "lele" };
var data = string.Join(",", list);
}
如果你真的需要StringBuilder,请在循环后修剪结束逗号:
data.ToString().TrimEnd(',');
只是用
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;
我建议你改变你的循环算法:
您应该使用string.Join
方法将项集合转换为逗号分隔的字符串。它将确保没有前导或尾随逗号,并确保有效构造字符串(没有不必要的中间字符串)。
是的,一旦循环完成,将其转换为字符串:
String str = data.ToString().TrimEnd(',');
你有两个选择。第一个是非常容易使用Remove
方法它是非常有效的。第二种方法是使用ToString
与起始指数和结束指数(MSDN documentation)