我收到了一个内存不足的异常,下面的代码将一个大字符串(str变量)拆分成行并将它们排队:
foreach (
var value in
str.Split(
new string[] { System.Environment.NewLine.ToString(CultureInfo.InvariantCulture) },
StringSplitOptions.None))
{
lines.Enqueue(value);
}
我的解决方案(我不确定它是一个好的解决方案)是首先将大字符串(str变量)拆分为4个块,然后分别拆分每个块,并将结果行排入行队列。我遇到的问题是弄清楚如何拆分换行符,这样我的最终行队列只包含完整的行。
我编写了以下代码将大字符串(str变量)拆分为4个子字符串但是如何将其更改为仅在换行符上拆分?
int chunkNum = 4;
int chunkLength = str.Length/chunkNum;
int stringLength = str.Length;
var j = 0;
for (var i = 0; i < stringLength; i += chunkLength)
{
if (j == (chunkNum - 1))
{
chunkLength = stringLength - i;
}
chunkQueue.Enqueue(str.Substring(i, chunkLength + i));
j++;
}
答案 0 :(得分:1)
您可以使用提供StreamReader
方法的ReadLine
。
string text = "Split\nby\nnewline", line = "";
using( StreamReader sr = new StreamReader( new MemoryStream( Encoding.UTF8.GetBytes( text ) ) ) ) {
while( ( line = sr.ReadLine() ) != null )
Console.WriteLine( line );
}
那套房能满足您的需求吗?只是将字符串排队而不是打印它。
答案 1 :(得分:0)
如果输入字符串很大,你可能从Stream(文件?)得到它。 也许您可以逐个字符地读取该流,附加到Stringbuilder,并在该字符是换行符时排队?
啊,只是错过了pikausp的答案,这更有意义......