如何检索StringBuilder行数?

Jon*_*Jon 24 .net c# stringbuilder

我有一个StringBuilder例子,我做了很多sb.AppendLine("test");例子.

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

我看到班级有,.Length但它告诉我有多少个角色.

有任何想法吗?

Han*_*ant 25

按效率排序:

  1. 计算您的AppendLine()调用
  2. 在循环中调用IndexOf()
  3. 使用正则表达式
  4. 使用String.Split()

最后一个是非常昂贵,并产生大量垃圾,不要使用.

  • 我认为选项#1可能导致错误,因为它不能保证计数的AppendLine()调用将真正匹配新行的实际数量.其他选择具有重要意义. (9认同)
  • 它们可能不会从天而降,但它们可以来自`Environment.NewLine`,`\ r \n`,`\n`,甚至来自传递给其他方法之一的内容. (9认同)
  • 嗯,换行符不是从天上掉下来的。但是,是的,效率在这里冒着可维护性的风险。 (2认同)

Jak*_*son 20

您可以StringBuilder使用自己的类进行换行,这样可以在添加行时保留行数,也可以在构建器已满后使用'\n'.

Regex.Matches(builder.ToString(), Environment.NewLine).Count
Run Code Online (Sandbox Code Playgroud)

  • 我猜你的意思是Regex.Matches(builder.ToString(),Environment.NewLine).Count; 因为Match()只返回一个匹配项. (4认同)
  • +1自己的类,或者甚至是扩展方法. (2认同)

Koe*_*box 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 修复了您的代码格式,但您可能希望将其更改为C#而不是Java的惯用语. (3认同)