C# 后台处理字符串如何+1

例如:1、字符串“AB0021”,末尾+1,变成“AB0022”。2、字符串“AZ9999”,末尾+1,变成“BA0000”。

题主要的代码如下

img

using System;
using System.Text.RegularExpressions;
namespace ConsoleApp1
{
    class Program
    {
        public static string AddOne(string s)
        {
            s = s.ToUpper();
            Regex re = new Regex(@"^([A-Z]*)(\d+)$", RegexOptions.Compiled);
            if (string.IsNullOrEmpty(s) || !re.IsMatch(s)) return "输入格式有误,请输入字母开头数字结尾的字符串";
            Match m = re.Match(s);
            string sChar = m.Groups[1].Value;

            int num = int.Parse(m.Groups[2].Value.TrimStart('0'));
            int numLen = m.Groups[2].Value.Length;
            num += 1;

            if (num.ToString().Length > numLen)
            {
                num = 0;
                if (sChar == "") sChar = "A";
                else
                {
                    int index = sChar.Length - 1;
                    var arr = sChar.ToCharArray();
                    bool flag = false;
                    while (index >= 0)
                    {
                        var c = arr[index];
                        if (c != 'Z')
                        {
                            flag = false;
                            arr[index] = (char)(int)(sChar[index] + 1);
                            break;
                        }
                        else
                        {
                            arr[index] = 'A';
                            flag = true;
                        }

                        index--;
                    }
                    sChar = (flag ? "A" : "") + string.Join("", arr);
                }
            }
            s = sChar + num.ToString().PadLeft(numLen, '0');
            return s;
        }

        static void Main(string[] args)
        {
            Console.WriteLine(AddOne("AB998"));
            Console.WriteLine(AddOne("AB0021"));
            Console.WriteLine(AddOne("AZ9999"));
            Console.WriteLine(AddOne("ZZ9999"));
            Console.WriteLine(AddOne("ZAZ9999"));

            Console.ReadKey();
        }


    }
}

img

首先问一下题主,格式一定是两位字符,四位数字吗?

  • 如果是这样,你可以先把后面的四位提取出来,转换成整数,对其进行+1操作,再转换成字符串,与前面的两个字母拼接
  • 但是因为数字只有四位,所以如果+1的结果是10000,那就要对第二位的字符的ASCII码+1,变成下一个字符,此时也要对第二位进行判断,如果第二位的ASCII码大于了Z的,说明第二位进位了,第二位要置为A,而第一位要改成它的下一个字符
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

思想是这样的,分别截取字母和字母后的字符串,然后转换成数字,再加1,然后再吧截取的字符串和加1后的数字拼接即可