9

コードをStringBuilder蓄積する があります。場合によっては、コード ブロック間に 2 行の空行があり、その 1 行を空行にしたいと考えています。
現在のコードの最後にすでに空の行があるかどうかを確認するにはどうすればよいですか? ToString()(パフォーマンスの問題があるため、そのメソッドを使用しないことを好みます。)

4

6 に答える 6

7

StringBuilderの場合と同様に、インデックスを使用しての任意の文字にアクセスできますString

var sb = new StringBuilder();
sb.Append("Hello world!\n");
Console.WriteLine(sb[sb.Length - 1] == '\n'); // True
于 2012-12-27T12:12:13.013 に答える
1

正規表現を使用して、改行を正規化できます。

var test = @"hello

moop

hello";

var regex = new Regex(@"(?:\r\n|[\r\n])+");

var newLinesNormalized = regex.Replace(test, Environment.NewLine);

出力:

hello
moop
hello
于 2012-12-27T12:18:53.467 に答える
1

単線チェック。StringBuilder ではなく文字列型を使用しますが、基本的な考え方は理解できるはずです。

if (theString.Substring(theString.Length - Environment.NewLine.Length, Environment.NewLine.Length).Contains(Environment.NewLine))
{
     //theString does end with a NewLine
}
else
{
     //theString does NOT end with a NewLine
}
于 2014-08-21T08:46:08.093 に答える
0

これが完全な例です。

class string_builder
{
    string previousvalue = null;
    StringBuilder sB;
    public string_builder()
    {
        sB = new StringBuilder();
    }
    public void AppendToStringBuilder(string new_val)
    {
        if (previousvalue.EndsWith("\n") &&  !String.IsNullOrEmpty(previousvalue) )
        {
            sB.Append(new_val);
        }
        else
        {
            sB.AppendLine(new_val);
        }

        previousvalue = new_val;
    }

}
class Program
{

    public static void Main(string[] args)
    {
        string_builder sb = new string_builder();            
        sb.AppendToStringBuilder("this is line1\n");
        sb.AppendToStringBuilder("this is line2");
        sb.AppendToStringBuilder("\nthis is line3\n");

    }            
}
于 2012-12-27T13:24:51.463 に答える
-1

コードの途中にある 2 行の空行は気にしないので、最も簡単な方法は次を使用することです。

myCode.Replace(string.Format("{0}{0}", Environment.NewLine),Environment.NewLine);

このオプションでは、コード アキュムレータを使用するクラスを変更する必要はありません。

于 2012-12-31T07:36:33.837 に答える