私は次のものを持っています
data.AppendFormat("{0},",dataToAppend);
これの問題は、ループで使用しているため、試行中のコンマがあることです。末尾のコンマを削除する最良の方法は何ですか?
データを部分文字列の文字列に変更する必要がありますか?
最も単純で最も効率的な方法は、次のコマンドを実行することです。
data.Length--;
これを行うことにより、ポインター(つまり、最後のインデックス)を1文字だけ戻しますが、オブジェクトの可変性は変更しません。実際、StringBuilder
をクリアするにはLength
を使用するのが最適です(ただし、実装は次のようになっているため、明確にするために実際にはClear()
メソッドを使用します)。
data.Length = 0;
繰り返しますが、それは割り当てテーブルを変更しないからです。私はもうこれらのバイトを認識したくないと言っているように考えてください。これで、ToString()
を呼び出した場合でも、Length
を超えたものは認識されません。これは変更可能なオブジェクトであり、ユーザーが提供するスペースよりも多くのスペースを割り当て、単純にこの方法で構築されます。
ただ使う
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(',');
2つのオプションがあります。最初の方法は非常に使いやすいRemove
メソッドで、非常に効果的です。 2番目の方法は、ToString
を開始インデックスと終了インデックスと共に使用することです( MSDN documentation )
最も簡単な方法は、Join()メソッドを使用することです。
public static void Trail()
{
var list = new List<string> { "lala", "lulu", "lele" };
var data = string.Join(",", list);
}
本当にStringBuilderが必要な場合は、ループの後に終了コンマをトリムします。
data.ToString().TrimEnd(',');