/// <summary>
/// 把字符串的最后第nOrder数字加1,如果最后第nOrder数字是9,则进一位,最后第nOrder+1数字再加1,如此循环,
/// 但如果第nOrder+1找不到,则结束循环。
/// </summary>
/// <param name="sText"></param>
/// <param name="nOrder">倒数第oOrder序列</param>
/// <returns></returns>
/// 创建时间:2021-12-27 最后一次修改时间:2022-03-06
public static string _Try_NumberAddOne(this string sText, int nOrder = 1)
{
if (nOrder <= 0) return sText;
StringBuilder sb = new StringBuilder(sText);
int i = sText._LastNumberIndex(nOrder);
if (i != -1)
{
if (sText[i] == '9')
{
sb[i] = (char)(Convert.ToInt16('0'));
//如果9前面有数字
if (sText.Substring(0, i)._IsHaveNumber())
return _Try_NumberAddOne(sb.ToString(), nOrder + 1);
else
{
sb.Insert(i, 1); //直接添加一位
return sb.ToString();
}
}
else
{
sb[i] = (char)(Convert.ToInt16(sText[i]) + 1);
return sb.ToString();
}
}
return sb.ToString();
}
/// <summary>
/// 返回: 如果nOrder=1,返回倒数第一位数字;如果nOrder=2,返回倒数第二位数字。
/// </summary>
/// <param name="sText"></param>
/// <param name="nOrder"></param>
/// <returns></returns>
/// 创建时间:2021-12-27 最后一次修改时间:2021-12-27
public static int _LastNumberIndex(this string sText, int nOrder)
{
if (nOrder <= 0) return -1;
int n = 0;
for (int i = sText.Length - 1; i >= 0; i--)
{
if (sText[i] >= '0' && sText[i] <= '9')
{
n++;
if (n == nOrder) return i;
}
}
return -1;
}