从StringBuilder中删除连续的空白行
我有一个已经从文本文件填充的Stringbuilder对象。 如何检查StringBuilder对象并删除连续的“空白”行。从StringBuilder中删除连续的空白行
即
Line 1: This is my text
Line 2:
Line 3: Another line after the 1st blank one
Line 4:
Line 5:
Line 6: Next line after 2 blank lines
(行号给出为参考)
2号线的空白行是好的,但我想删除重复的空行,第5行,因此上。
如果出于参数目的,第6行也是空白行,第7行有一个值,我想删除空白行5和空白行6,以便行间只有1个空行3和7号线。
在此先感谢。
您是否必须在StringBuilder中拥有文件内容?
能够一行一行阅读会更好。喜欢的东西:
private IEnumerable<string> GetLinesFromFile(string fileName)
{
using (var streamReader = new StreamReader(fileName))
{
string line = null;
bool previousLineWasBlank = false;
while ((line = streamReader.ReadLine()) != null)
{
if (!previousLineWasBlank && string.IsNullOrEmpty(line))
{
yield return line;
}
previousLineWasBlank = string.IsNullOrEmpty(line);
}
}
}
现在你可以在你的文本阅读(这已经删除重复数据删除空行)是这样的:
foreach (var line in GetLinesFromFile("myFile.txt"))
{
Console.WriteLine(line);
}
注:我只在这里说明的技术。还有其他的考虑因素:例如我的迭代器方法在消费者正在处理foreach的同时保持文件打开。这是很好的,高效的内存(比读入字符串更有效),因为您一次只处理一行,但对于需要很长时间处理的文件并不理想。
可能效率不高,但很容易。
while(sb.ToString().Contains(Environment.NewLine + Environment.NewLine))
{
sb = sb.Replace(Environment.NewLine + Environment.NewLine, Environment.NewLine);
}
“效率不高”是一个相当大的轻描淡写。 – 2010-07-08 17:32:50
@Hans:这是所有相对的,在我重写的最近一个项目中,以前的开发人员使用Excel自动化来分析csv文件(在Excel中打开文件,将32,000行第一行* 12列,逐个单元格复制到在C#应用程序中使用multidim数组),需要大约12分钟才能将平均300行文件加载到内存中。所以相对而言,我不认为这太糟糕:) – 2010-07-08 18:20:40
Hmya,*所有*都与我想的相关。 – 2010-07-08 18:58:39
只是不要将它们附加到StringBuilder当你读取文件。 – 2010-07-08 17:33:27
谢谢,但它是另一个读取具有.GetStringBuilder()方法的文本文件的组件。 对不起,忘了提。 – Riaan 2010-07-08 18:59:13