[Memo]使用Trim(Char[])要注意的地方

[Memo]使用Trim(Char[])要注意的地方


前言
今天碰到一个小小的需求,我们直接来看简化后的程序:


        var content = @"Joey:Joey的content";
        var pattern = @"Joey:";

        //希望得到的结果是Joey的content



实践
我们希望得到的结果,是将开头的‘Joey:’拔掉,得到‘Joey的Content’,当下很直觉的就是用TrimStart()去做


        var content = @"Joey:Joey的content";
        var pattern = @"Joey:";

        var result = content.TrimStart(pattern.ToCharArray());
        //result的值= 的content


出来的结果,得到的却是‘的Content’,连我要的‘Joey’都被拔掉了。

问题原因
原因是TrimStart的参数为CharArray,当我们需求是用string,而不是用CharArray思考时,就很容易不小心把Trim()用错地方。

当我们为了使用TrimStart(),而将"Joey:".ToCharArray()后,字符串就变成{'J', 'o', 'e', 'y', ':'},接着TrimStart的行为是从字符串的开头符,来比较这个Char有没有在CharArray中,若有,则移掉,直到比较符不在CharArray中停止。

所以,我们希望得到的‘Joey的content’,前面的‘Joey’当然也就被移掉了。

改使用Regular Expression
原本想说这么简单的需求,不想用到Regular Expression,不过为了之后的弹性,还是改用Regex.Replace来做。


        var content = @"Joey:Joey的content";
        var pattern = @"Joey:";

        var result = Regex.Replace(content, "^" + pattern, string.Empty);

^代表开头,也就是我要将content里面,开头为pattern这个值,取代成string.Empty。

结论
魔鬼都藏在细节中啊,memo一下给自己一个警惕。希望不要有其他朋友跟我一样傻傻的就给它Trim()下去了。


或许您会对下列培训课程感兴趣:

  1. 2019/7/27(六)~2019/7/28(日):演化式设计:测试驱动开发与持续重构 第六梯次(中国台北)
  2. 2019/8/16(五)~2019/8/18(日):【C#进阶设计-从重构学会高易用性与高弹性API设计】第二梯次(中国台北)
  3. 2019/9/21(六)~2019/9/22(日):Clean Coder:DI 与 AOP 进阶实战 第二梯次(中国台北)
  4. 2019/10/19(六):【针对遗留代码加入单元测试的艺术】第七梯次(中国台北)
  5. 2019/10/20(日):【极速开发】第八梯次(中国台北)

想收到第一手公开培训课程资讯,或想询问企业内训、顾问、教练、咨询服务的,请洽 Facebook 粉丝专页:91敏捷开发之路。