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
}