专栏首页林德熙的博客C# dotnet 分割换行

C# dotnet 分割换行

我在写一个 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 ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • dotnet 通过 WMI 获取系统补丁

    Win32_QuickFixEngineering class - Windows applications

    林德熙
  • C# 金额转中文大写

    创建的项目是创建一个 dot net core 的项目,实际上这个项目可以创建为 Stand 的。

    林德熙
  • win10 uwp 使用 Border 布局

    在 UWP 写一个界面需要将元素排列,在排列元素的时候有特殊的元素叫容器。容器的意思是元素里面包含元素,在 UWP 用到的容器有很多,也可以自己写一个。简单的容...

    林德熙
  • 对深度学习的降维攻击—人工智能系统数据流中的安全风险

    深度学习在很多领域受到广泛关注。尤其在图形图像领域里,人脸识别和自动驾驶等应用正在逐渐进入我们的生活。深度学习的流行与普及也自然带来了安全方面的考虑。目前对深度...

    企鹅号小编
  • 棋牌游戏服务器架构: 详细设计(一) 内核设计

    内核的几个组件被设计成Service,也就是说这几个模块都要实现如下接口: ? 图1 IService接口 Start方法用来启动服务。 ...

    李海彬
  • 棋牌游戏服务器架构: 详细设计(一) 内核设计

    内核的几个组件被设计成Service,也就是说这几个模块都要实现如下接口: ? 图1 IService接口 Start方法用来启动服务。 ...

    李海彬
  • 棋牌游戏服务器架构: 详细设计(一) 内核设计

    内核的几个组件被设计成Service,也就是说这几个模块都要实现如下接口: ? 图1 IService接口 Start方法用来启动服务。 ...

    李海彬
  • Foundation:高级的响应式前端框架

    对于前端框架,Jeff 了解Bootstrap 甚于这个Foundation(貌似在写该文之前还没听说过Foundation)。所以,今天在这里恶补一下,介绍一...

    Jeff
  • 原生js实现二级联动下拉列表菜单

    if(data.code == 0) { //查询成功 var param = data.content; for(i = 0; i < par...

    寻找石头鱼
  • 学界 | 深度学习算法全景图:从理论证明其正确性

    选自arXiv 机器之心编译 参与:蒋思源、黄小天 ? 论文地址:https://arxiv.org/abs/1705.07038 本论文通过理论分析深度神经...

    机器之心

扫码关注云+社区

领取腾讯云代金券