我有一个已从文本文件填充的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
Run Code Online (Sandbox Code Playgroud)
(行号仅供参考)
第2行的空白行很好,但我想在第5行删除重复的空白行,依此类推.
如果为了论证,第6行也是一个空白行,并且第7行有一个值,我想删除空行5和空行6,这样第3行和第7行之间只有1个空白行.
提前致谢.
您是否必须在 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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在您可以像这样读入您的文本(已删除重复的空行):
foreach (var line in GetLinesFromFile("myFile.txt"))
{
Console.WriteLine(line);
}
Run Code Online (Sandbox Code Playgroud)
注意:我在这里只是说明一种技术。还有其他注意事项:例如,当消费者处理 foreach 时,我的迭代器方法使文件保持打开状态。这很好,而且内存效率很高(例如,比读入字符串更有效),因为您一次只处理一行,但对于需要很长时间处理的文件来说并不理想。