C# dotnet 分割換行

  • 2020 年 3 月 27 日
  • 筆記

我在寫一個 UWP 文本閱讀器,我需要提升性能,需要將文本按行繪製但是文本裡面的換行分割規則有點坑,本文寫了一個輔助的方法用於分割換行

雖然有默認字元串提供的 Split 分割方法很好用,在一些字元串裡面只包含 rn 很好用,但是如果在字元串裡面同時包含了 rn 就不好玩了,如下面字元串

             var str = "123123r123123n123123rn123";

我需要按照只要有 rn 就分割字元串,如果有連續的 rn 就分割一次

            var newLineList = str.Split('n', 'r').Select(text => text = text.Replace("r", ""))                  .ToList();

上面程式碼將會多分割出一個空行,原因是 rn 被分割為兩行

我自己寫了一個輔助程式碼

        private static List<string> SplitMultiLines(string str)          {              var lineList = new List<string>();              var text = new StringBuilder(str.Length);              for (var i = 0; i < str.Length; i++)              {                  var c = str[i];                  if (c == 'r')                  {                      lineList.Add(text.ToString());                      text.Clear();                        if (i < str.Length - 1)                      {                          if (str[i + 1] == 'n')                          {                              i++;                          }                      }                  }                  else if (c == 'n')                  {                      lineList.Add(text.ToString());                      text.Clear();                        if (i < str.Length - 1)                      {                          if (str[i + 1] == 'r')                          {                              i++;                          }                      }                  }                  else                  {                      text.Append(c);                  }              }                lineList.Add(text.ToString());              return lineList;          }

上面程式碼能符合我預期,如果小夥伴有更簡單的方法,歡迎告訴我

本文程式碼放在 github 歡迎小夥伴訪問


本文會經常更新,請閱讀原文: https://blog.lindexi.com/post/C-dotnet-%E5%88%86%E5%89%B2%E6%8D%A2%E8%A1%8C.html ,以避免陳舊錯誤知識的誤導,同時有更好的閱讀體驗。