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

,ファイナルが必要ない場合は追加しないでください。

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

書き込み可能であるため、最も簡単なのは'sで使用-=することです。StringBuilderLength

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.JoinStringBuilderます。

この質問は、を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 に答える