如何检索StringBuilder行数?

时间:2010-09-03 13:46:43

标签: c# .net stringbuilder

我有一个StringBuilder实例,例如我在sb.AppendLine("test");做了很多次。

我如何计算出我有多少行?

我看到该课程有.Length,但它告诉我所有人物中有多少个字符。

有什么想法吗?

10 个答案:

答案 0 :(得分:24)

按效率排序:

  1. 计算您的AppendLine()调用
  2. 在循环中调用IndexOf()
  3. 使用Regex
  4. 使用String.Split()
  5. 最后一个是非常昂贵并且生成批次垃圾,不要使用。

答案 1 :(得分:18)

您可以使用自己的类来包装StringBuilder,这些类会在添加行时保留行数,或者在构建器已满后可以包含“\ n”的数量。

Regex.Matches(builder.ToString(), Environment.NewLine).Count

答案 2 :(得分:6)

您可以创建一个包装类,执行以下操作:

public class Wrapper
{
    private StringBuilder strBuild = null;
    private int count = 0;
    public Wrapper(){
        strBuild = new StringBuilder();
    }
    public void AppendLine(String toAppendParam){
        strBuild.AppendLine(toAppendParam);
        count++;
    }
    public StringBuilder getStringBuilder(){
        return strBuild;
    }

    public int getCount(){
        return count;
    }
}

答案 3 :(得分:3)

试试这个:

sb.ToString().Split(System.Environment.NewLine.ToCharArray()).Length;

答案 4 :(得分:2)

您应该能够搜索字符串中\ n的出现次数。

更新: 一种方法是拆分换行符并计算数组中元素的数量,如下所示:

sb.ToString().Split('\n').length;

答案 5 :(得分:2)

更新 What Gabe said

  

b.ToString()。Count(c => c =='\ n')也可以在这里工作,也可能不会   效率低得多(除了创建单独的副本   串!)。


一种更好的方法,比从StringBuilder创建字符串并将其拆分(或创建字符串并regex更快)更快,就是查看StringBuilder并计算{{1那里的人物。

以下扩展方法将通过字符串构建器中的字符进行枚举,然后您可以对其进行处理,直到您满意为止。

'\n'

...在这里使用,计数将是4

    public static IEnumerable<char> GetEnumerator(this StringBuilder sb)
    {
        for (int i = 0; i < sb.Length; i++)
            yield return sb[i];
    }

<击>

答案 6 :(得分:2)

如果您要使用String.Split(),则需要使用一些选项拆分字符串。像这样:

static void Main(string[] args)
{
    var sb = new StringBuilder();
    sb.AppendLine("this");
    sb.AppendLine("is");
    sb.AppendLine("a");
    sb.AppendLine("test");

    // StringSplitOptions.None counts the last (blank) newline 
    // which the last AppendLine call creates
    // if you don't want this, then replace with 
    // StringSplitOptions.RemoveEmptyEntries
    var lines = sb.ToString().Split(
        new string[] { 
            System.Environment.NewLine }, 
        StringSplitOptions.None).Length;

    Console.WriteLine("Number of lines: " + lines);

    Console.WriteLine("Press enter to exit.");
    Console.ReadLine();
}

这导致:

Number of lines: 5

答案 7 :(得分:1)

导出自己的行计数StringBuilder,其中AppendLine增加内部行数,并提供获取行计数值的方法。

答案 8 :(得分:0)

使用正则表达式来计算字符串中行终止符的数量(例如:\ r \ n)。或者,将字符串加载到文本框中并进行行计数,但这就是黑客行事方式

答案 9 :(得分:0)

您可以将字符串浮雕数据拆分为String []数组,然后使用String []。长度为行数。

如下所示:

String[] linestext = sb.Split(newline)
Console.Writeline(linetext.Length)