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 回答
-1

万一有人像我在这里所做的那样最终来到这里,这是一种检查 a 结尾是否StringBuilder有必须使用的任意字符串的通用方法ToString

public static bool EndsWith(this StringBuilder haystack, string needle)
{
    var needleLength = needle.Length - 1;
    var haystackLength = haystack.Length - 1;
    if (haystackLength < needleLength)
    {
        return false;
    }
    for (int i = 0; i < needleLength; i++)
    {
        if (haystack[haystackLength - i] != needle[needleLength - i])
        {
            return false;
        }
    }
    return true;
}
于 2013-11-01T07:21:48.113 回答