0

我正在使用子字符串构建一串数据。我想要的数据格式是

[1,2,3,4,5,6,7,8,9,10]

所以我正在构建它如下

StringBuilder sb = new StringBuilder();
sb.append("1,");
sb.append("2,");
sb.append("3,");
.
.
.

我遇到的问题是当我想,在添加结束之前修剪决赛]

我可以做

sb.ToString();
sb.Substring(0, (sb.Length - 1));
sb += "]";

但是使用 += 不是很有效,因为这会创建一个新字符串。有没有更好的方法来做到这一点?

4

5 回答 5

6
var str = "[" + String.Join(", ",Enumerable.Range(1,10)) + "]";
于 2012-11-12T10:11:44.663 回答
4

,如果不需要,请不要添加 final :

var sb = new StringBuilder().Append('[');
var first = true;
foreach (var item in collection)
{
    if (first)
        first = false;
    else
        sb.Append(',');
    sb.Append(item);
}
sb.Append(']');
var result = sb.ToString();
于 2012-11-12T10:12:42.713 回答
3

最简单的是-=StringBuilder's上使用,Length因为它是可写的:

sb.Length -= 1; // removes the last char
于 2012-11-12T10:11:54.090 回答
3

更新

经过一点测试

var result = string.Concat("[", string.Join(",", someEnumerable), "]");

比构建器方法更简单、更快


你总是可以做

var result = string.Format("[{0}]", string.Join(",", someEnumerable));

序列可以是任何你想要的,例如

var someEnumerable = Enumerable.Range(1, 10);

这似乎比重新发明轮子更简单,并且避免了中间字符串。

这确实对实现做出了假设,String.Join但是,我认为你应该假设它对于这个目的来说已经足够好了。


有关更多信息,此问题String.Join在和之间进行比较StringBuilder

这个问题表示String.Format使用StringBuilder.

于 2012-11-12T10:12:40.077 回答
1

这是一个很好的清洁方法的示例:

    public static string WriteValues(int start, int end)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("[");
        for (int index = start; index <= end; index++)
        {
            sb.Append(index).Append(",");
        }
        sb.Length -= 1;
        sb.Append("]");
        return sb.ToString();
    }

这完成了 StringBuilder 中的所有工作,然后传回单个字符串。您还可以指定开始和结束值!

于 2012-11-12T10:26:55.300 回答