簡體   English   中英

C#將字符串拆分為四個相等的子字符串,但僅在換行符處

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM