zoukankan      html  css  js  c++  java
  • C#的String.Create方法替换手机号或证件号为“*”

            /// <summary>
            /// 将传入的字符串中间部分字符替换成特殊字符
            /// </summary>
            /// <param name="value">需要替换的字符串</param>
            /// <param name="startLen">前保留长度</param>
            /// <param name="endLen">尾保留长度</param>
            /// <param name="specialChar">特殊字符</param>
            /// <returns>被特殊字符替换的字符串</returns>
            public static string ReplaceWithSpecialChar(this String value, int startLen, int endLen, char specialChar)
            {
                if (!value.IsNullOrEmpty() && value.Length > (startLen+ endLen))
                {
                    value = string.Create(value.Length, (value, startLen, endLen, specialChar), (dst, v) =>
                    {
                        ReadOnlySpan<char> startValue = v.value.Substring(0, v.startLen);
                        startValue.CopyTo(dst.Slice(0, startValue.Length));
    
                        int subLenth = v.value.Length - v.startLen - v.endLen;
                        subLenth = subLenth < 0 ? 0 : subLenth;

                 ReadOnlySpan<char> specialValue = "".PadLeft(subLenth, v.specialChar) ;
                         specialValue.CopyTo(dst.Slice(startValue.Length, subLenth));

                        ReadOnlySpan<char> endValue = subLenth >= 0 ? v.value.Substring(v.startLen + subLenth) : string.Empty;
                        endValue.CopyTo(dst.Slice(startValue.Length + subLenth, endValue.Length));
                    });
                }
    
                return value;
            }
            public static string Mask(this string source, int start, int length, char maskChar = '*')
            {
                var end = start + length;
                if (source.Length <= start)
                {
                    return source;
                }
                else if (source.Length < end)
                {
                    return source.Substring(0, start) + "".PadLeft(source.Length - start, maskChar);
                }
                return source.Substring(0, start) + "".PadLeft(length, maskChar) + source.Substring(end);
            }

    String.Create 好在哪


    此时,你可能会对Create方法感到好奇,但你不一定知道为什么它比你之前使用过的方法更好。Create API 的用处是因地制宜的,但在适当的情况下,它可以发挥极大的威力。

    • 它会预先分配一块内存空间,然后给你一个接口来安全地填充这个空间。其他创建字符串的方法可能需要编写不安全代码或管理缓冲池。
    • 它避免了对数据进行额外的复制操作,这通常使内存的分配更少。这也减少了来自垃圾收集器的压力,可以加快程序的整体效率。
    • 它允许你将高性能代码集中在应用程序的业务需求上,而不是将你的字符串构建代码与复杂的内存管理交织在一起。

    参考文章


    1:https://www.cnblogs.com/willick/p/14152115.html

    声明:本文纯属个人随手笔记,如果对您有参考价值我十分开心,如果有存在错误,或者有更好的解决办法也麻烦您留言告诉我,大家共同成长,切勿恶言相。 欢迎加入MSDN技术交流群:235937854,一起发现知识、了解知识、学习知识、分享知识
  • 相关阅读:
    ES6基础
    RegExp正则表达式基础
    JavaScript基础之--- 手写 bind 方法的实现
    JavaScript基础之--- 手写 apply方法 的实现
    JavaScript基础之--- 手写 call 的实现
    JavaScript基础之--- 手写instanceof 的实现
    git系列之---工作中项目的常用git操作
    git系列之---将本地的项目添加到码云仓库
    git系列之---码云gitee 添加SHH公钥
    TCP的三次握手过程
  • 原文地址:https://www.cnblogs.com/imhaiyang/p/14504426.html
Copyright © 2011-2022 走看看