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