我有一个StringBuilder
实例,例如我在sb.AppendLine("test");
做了很多次。
我如何计算出我有多少行?
我看到该课程有.Length
,但它告诉我所有人物中有多少个字符。
有什么想法吗?
答案 0 :(得分:24)
按效率排序:
最后一个是非常昂贵并且生成批次垃圾,不要使用。
答案 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)
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)