2

文字列に出現する ASCII 文字をすべて見つけて、新しい行に置き換えようとしています。これが私がこれまでに持っているものです:

public string parseText(string inTxt)
{
    //String builder based on the string passed into the method
    StringBuilder n = new StringBuilder(inTxt);
    //Convert the ASCII character we're looking for to a string
    string replaceMe = char.ConvertFromUtf32(187);
    //Replace all occurences of string with a new line
    n.Replace(replaceMe, Environment.NewLine);
    //Convert our StringBuilder to a string and output it
    return n.ToString();
}

これは新しい行に追加されず、文字列はすべて 1 行に残ります。ここで何が問題なのかわかりません。私もこれを試しましたが、同じ結果:

n.Replace(replaceMe, "\n");

助言がありますか?

4

2 に答える 2

11

char.ConvertFromUtf32は正しいですが、ASCII 数値に基づいて文字を読み取る最も簡単な方法ではありません。(ConvertFromUtf32これは主に、サロゲート ペアになる BMP の外側にある Unicode コード ポイントを対象としています。これは、英語やほとんどの現代言語で遭遇するものではありません。)むしろ、 を使用してキャストする必要があります(char)

char c = (char)187;
string replaceMe = c.ToString();

もちろん、必要な文字を含む文字列をコードでリテラルとして定義することもできます: "»".

次に、次のReplaceように単純化されます。

n.Replace("»", "\n");

最後に、技術的なレベルでは、ASCII は値が 0 ~ 127 の範囲にある文字のみをカバーします。文字 187 は ASCII ではありません。ただし、»ISO 8859-1、Windows-1252、およびUnicode に対応しており、これらを総合すると、現在使用されている最も一般的なエンコーディングです。

編集:元のコードをテストしたところ、実際に機能することがわかりました。結果が 1 行に収まっていますか? デバッガーが単一行ビューで文字列をレンダリングする方法に問題がある可能性があります。

改行なし?

リテラルとして表示されているにもかかわらず、\r\nシーケンスは実際に改行を表していることに注意してください。これは、複数行表示から確認できます (虫めがねをクリック)。

改行!

于 2012-05-24T18:53:04.840 に答える
0

StringBuilder.Replace変更が加えられた新しいものを返しますStringBuilder。奇妙なことですが、これでうまくいくはずです。

StringBuilder replaced = n.Replace(replaceMe, Environment.NewLine);

return replaced.ToString();
于 2012-05-24T18:55:27.300 に答える