字符串处理类

public static class StringExtension
    {
        /// <summary>
        /// 分割字符串
        /// </summary>
        /// <param name="str"></param>
        /// <param name="length">分割长度,默认4</param>
        /// <param name="divide">分割字符</param>
        /// <returns></returns>
        public static string DivideString(this string str, int length = 4, string divide = " ")
        {
            StringBuilder sb = new StringBuilder();
            int count = 1;
            foreach (var c in str)
            {
                sb.Append(c);
                if (count++ >= length)
                    sb.Append(divide);
            }
            return sb.ToString();
        }

        /// <summary>
        /// 替换字符
        /// </summary>
        /// <param name="str"></param>
        /// <param name="endIndex">不包含endIndex</param>
        /// <param name="replace">替换字符</param>
        /// <param name="replaceLength">替换字符长度,默认-1表示实际个数</param>
        /// <returns></returns>
        public static string ReplaceStart(this string str, int endIndex, string replace, int replaceLength = -1)
        {
            return str.Replace(0, endIndex, replace, replaceLength);
        }

        /// <summary>
        /// 替换后面的字符
        /// </summary>
        /// <param name="str"></param>
        /// <param name="startIndex">包含startIndex</param>
        /// <param name="replace">替换字符</param>
        /// <param name="replaceLength">替换字符长度,默认-1表示实际个数</param>
        /// <returns></returns>
        /// <returns></returns>
        public static string ReplaceEnd(this string str, int startIndex, string replace, int replaceLength = -1)
        {
            return str.Replace(startIndex, str.Length - 1, replace, replaceLength);
        }

        /// <summary>
        /// 保留前面字符串
        /// </summary>
        /// <param name="str"></param>
        /// <param name="count">保留个数</param>
        /// <param name="replace">替换字符</param>
        /// <param name="replaceLength">替换个数</param>
        /// <returns></returns>
        public static string RetainStart(this string str, int count, string replace, int replaceLength = -1)
        {
            return str.ReplaceEnd(count, replace, replaceLength);
        }

        /// <summary>
        /// 保留后面字符串
        /// </summary>
        /// <param name="str"></param>
        /// <param name="count">保留个数</param>
        /// <param name="replace">替换字符</param>
        /// <param name="replaceLength">替换个数</param>
        /// <returns></returns>
        public static string RetainEnd(this string str, int count, string replace, int replaceLength = -1)
        {
            return str.ReplaceStart(str.Length - count, replace, replaceLength);
        }
        
        /// <summary>
        /// 替换字符
        /// </summary>
        /// <param name="str"></param>
        /// <param name="startIndex">包含startIndex</param>
        /// <param name="endIndex">不包含endIndex</param>
        /// <param name="replace">替换字符</param>
        /// <param name="replaceLength">替换字符长度,默认-1表示实际个数</param>
        /// <returns></returns>
        public static string Replace(this string str, int startIndex, int endIndex, string replace, int replaceLength = -1)
        {
            if (endIndex >= str.Length) endIndex = str.Length - 1;
            if (startIndex < 0) startIndex = 0;
            if (startIndex >= endIndex) return str;

            StringBuilder sb = new StringBuilder();
            sb.Append(str.Substring(0, startIndex));

            int count = replaceLength == -1 ? endIndex - startIndex : replaceLength;
            for (int i = 0; i < count; i++)
                sb.Append(replace);
            sb.Append(str.Substring(endIndex));

            return sb.ToString();
        }




        #region 银行卡相关

        /// <summary>
        /// 格式化银行卡号,每4位一分割
        /// </summary>
        /// <param name="num"></param>
        /// <param name="length"></param>
        /// <returns></returns>
        public static string FormatBankCardNum(this string num, int length = 4)
        {
            return DivideString(num, length);
        }

        /// <summary>
        /// 保留前面count个数据,其他替换为replace
        /// </summary>
        /// <param name="num"></param>
        /// <param name="count"></param>
        /// <param name="replace"></param>
        /// <returns></returns>
        public static string RetainStartCardNum(this string num, int count, string replace)
        {
            //return RetainCardNum(num, count, num.Length, replace);
            string retainNum = num.Substring(num.Length - count);

            StringBuilder sb = new StringBuilder();
            int countIndex = 1;
            for (int i = 0; i < 16 - count; i++)
            {
                sb.Insert(0, replace);
                if (countIndex++ >= 4)
                {
                    sb.Insert(0, ' ');
                    countIndex = 1;
                }
            }
            string str = sb.ToString().TrimStart(' ');
            return retainNum + " " + str;
        }

        /// <summary>
        /// 保留后面count个数据,其他替换为replace
        /// </summary>
        /// <param name="num"></param>
        /// <param name="count"></param>
        /// <param name="replace"></param>
        /// <returns></returns>
        public static string RetainEndCardNum(this string num, int count, string replace)
        {
            //return RetainCardNum(num, 0, num.Length - count, replace);

            string retainNum = num.Substring(num.Length - count);
            int countIndex = 1;
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < 16 - count; i++)
            {
                sb.Append(replace);
                if (countIndex++ >= 4)
                {
                    sb.Append(" ");
                    countIndex = 1;
                }
            }
            string str = sb.ToString().TrimEnd(' ');
            return str + " " + retainNum;
        }

        /// <summary>
        /// 替换为*号,每四位分割一下
        /// </summary>
        /// <param name="num"></param>
        /// <param name="startIndex">包含startIndex</param>
        /// <param name="endIndex">不包含endIndex</param>
        /// <param name="replace">替换字符</param>
        /// <returns></returns>
        public static string ReplaceCardNum(this string num, int startIndex, int endIndex, string replace)
        {
            if (string.IsNullOrEmpty(num))
            {
                return string.Empty;
            }
            StringBuilder sb = new StringBuilder();
            int count = 1;
            for (int i = 0; i < num.Length; i++)
            {
                if (i >= startIndex && i < endIndex)
                    sb.Append(replace);
                else
                    sb.Append(num[i]);

                if (count++ >= 4)
                {
                    sb.Append(" ");
                    count = 1;
                }
            }
            return sb.ToString();
        }

        #endregion
    }
原文地址:https://www.cnblogs.com/nayilvyangguang/p/13624947.html