[英]C# Split a string in four equal substrings but only at newline
我收到了以下代碼的內存不足異常,該異常將一個大字符串(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++;
}
您可以使用提供ReadLine
方法的StreamReader
。
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 );
}
那適合您的需求嗎? 只是將字符串排隊,而不是打印它。
如果輸入字符串太大,那么您可能還是從Stream(文件?)獲得了它。 也許您可以只逐字符讀取該流字符,將其追加到Stringbuilder,然后在字符為換行符時排隊?
啊,只是錯過了pikausp的答案,這更有意義了...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.