1

長い文字列を扱うと、この問題が見つかりました。何かアドバイス?

文字列ビルダーの容量が 1024 で長さが 992 のインスタンスがあります。

.Append() は、.Length プロパティが 1024 の文字列です。

.Append() が呼び出された後、.ToString() メソッドは長い "\0\0\0" 文字列を返します。

何が起こっている?0.o

新しい StringBuilder オブジェクトを作成してから追加すると、期待どおりの結果が得られます。それで、文字列「すべき」は大丈夫ですよね?

(.Remove(0, LengthofSB) トリックを実行して stringbuilder をクリアしています)。

何か案は?

4

2 に答える 2

3

の元のデータは「\0\0\0\0\0...」のように聞こえますが、それがStringBuilderあなたが見ているものです-文字列の最後まで見ることができれば、実際のデータ。

これは、さまざまな Windows コントロールが "\0" を文字列終了文字として扱うため、切り捨てることによって悪化します。

問題を示す短いが完全なプログラムがあれば、私の疑いを確認できます。

于 2009-12-30T08:05:56.320 に答える
0

質問からわかる限り、以下のコードを実行してみました。上記のように「\0\0\0」という文字列がなくても問題なく動作しました。以下にコードを掲載しました。あなたがどのようにやっていたかを提供していないので注意してください。あなたはこのようなことを試みていたと思います。また、1024 の 2 つの文字列を作成し、1 つの文字列を 'a' でいっぱいにし、もう 1 つの文字列を 'b' にして、それらを最初の stringbuilder オブジェクトに結合しています。それはうまくいきました。

StringBuilder sb1 = new StringBuilder(1024);
for (int i = 0; i < 992; i++)
    sb1.Append('a');
Console.WriteLine(sb1.ToString());
Console.WriteLine("{0}",sb1.Length);

StringBuilder sb2 = new StringBuilder();
for (int i = 0; i < 1024; i++)
    sb2.Append('b');
Console.WriteLine(sb2.ToString());
Console.WriteLine("{0}",sb2.Length);

sb1.Append(sb2.ToString());
Console.WriteLine(sb1.ToString());
Console.WriteLine("{0}",sb1.Length);
于 2009-12-30T10:16:17.920 に答える