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,一起发现知识、了解知识、学习知识、分享知识