我有以下
data.AppendFormat("{0},",dataToAppend);
这个问题是我在循环中使用它并且会有一个试用逗号。删除尾随逗号的最佳方法是什么?
我是否必须将数据更改为字符串子串呢?
答案 0 :(得分:185)
最简单且最有效的方式是执行此命令:
data.Length--;
通过执行此操作,您可以将指针(即最后一个索引)移回一个字符,但不会更改对象的可变性。事实上,最好使用StringBuilder
清除Length
(但为了清晰起见,请务必使用Clear()
方法,因为这就是它的实现方式):
data.Length = 0;
再次,因为它不会更改分配表。想想它就像说,我不想再识别这些字节了。现在,即使在调用ToString()
时,它也无法识别Length
之后的任何内容,嗯,它不能。它是一个可变对象,分配的空间比你提供的空间多,它只是以这种方式构建。
答案 1 :(得分:36)
只需使用
string.Join(",", yourCollection)
这样您就不需要StringBuilder
和循环。
答案 2 :(得分:10)
循环后使用以下内容。
.TrimEnd(',')
或只是改为
string commaSeparatedList = input.Aggregate((a, x) => a + ", " + x)
答案 3 :(得分:8)
如何...
string str = "The quick brown fox jumps over the lazy dog,";
StringBuilder sb = new StringBuilder(str);
sb.Remove(str.Length - 1, 1);
答案 4 :(得分:6)
我更喜欢操纵stringbuilder的长度:
data.Length = data.Length - 1;
答案 5 :(得分:3)
我建议您更改循环算法:
答案 6 :(得分:3)
您应该使用string.Join
方法将项目集合转换为逗号分隔的字符串。它将确保没有前导或尾随逗号,并确保有效地构造字符串(没有不必要的中间字符串)。
答案 7 :(得分:2)
是的,在循环完成后将其转换为字符串:
String str = data.ToString().TrimEnd(',');
答案 8 :(得分:2)
您有两种选择。第一个是非常容易使用的Remove
方法非常有效。第二种方法是将ToString
与起始索引和结束索引(MSDN documentation)
答案 9 :(得分:2)
答案 10 :(得分:1)
最简单的方法是使用Join()方法:
public static void Trail()
{
var list = new List<string> { "lala", "lulu", "lele" };
var data = string.Join(",", list);
}
如果你真的需要StringBuilder,请在循环后修剪结束逗号:
data.ToString().TrimEnd(',');
答案 11 :(得分:0)
如果您使用AppendLine
,如下所示,此线程上的大多数答案将无效:
var builder = new StringBuilder();
builder.AppendLine("One,");
builder.Length--; // Won't work
Console.Write(builder.ToString());
builder = new StringBuilder();
builder.AppendLine("One,");
builder.Length += -1; // Won't work
Console.Write(builder.ToString());
builder = new StringBuilder();
builder.AppendLine("One,");
Console.Write(builder.TrimEnd(',')); // Won't work
为什么? @ (&**(&@ !!
问题很简单,但花了我一段时间才弄清楚:因为在CR
和LF
的末尾还有两个不可见字符(回车和换行饲料)。因此,您需要带走最后3个字符:
var builder = new StringBuilder();
builder.AppendLine("One,");
builder.Length -= 3; // This will work
Console.WriteLine(builder.ToString());
结论
如果您调用的最后一个方法是Length--
,请使用Length -= 1
或Append
。如果您最后一次调用了Length =- 3
,请使用AppendLine
。