我在写一个 UWP 文本阅读器,我需要提升性能,需要将文本按行绘制但是文本里面的换行分割规则有点坑,本文写了一个辅助的方法用于分割换行
虽然有默认字符串提供的 Split 分割方法很好用,在一些字符串里面只包含 \r
或 \n
很好用,但是如果在字符串里面同时包含了 \r
和 \n
就不好玩了,如下面字符串
var str = "123123\r123123\n123123\r\n123";
我需要按照只要有 \r
或 \n
就分割字符串,如果有连续的 \r\n
就分割一次
var newLineList = str.Split('\n', '\r').Select(text => text = text.Replace("\r", ""))
.ToList();
上面代码将会多分割出一个空行,原因是 \r\n
被分割为两行
我自己写了一个辅助代码
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 ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
如果你想持续阅读我的最新博客,请点击 RSS 订阅,推荐使用RSS Stalker订阅博客,或者收藏我的博客导航
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。
无盈利,不卖课,做纯粹的技术博客
以下是广告时间
推荐关注 Edi.Wang 的公众号
欢迎进入 Eleven 老师组建的 .NET 社区
以上广告全是友情推广,无盈利