C#字母数字混合自增(4位)

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;


namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = string.Empty;
            StringBuilder sbr = new StringBuilder();
            DateTime dt = DateTime.Now;


            while (true)
            {
                s = GetNextLeter(s);
                Console.Write(s + ",");
                sbr.Append(s + ",");
                if (string.IsNullOrEmpty(s) || s.Equals("ZZZZ"))
                    break;
            }
            DateTime dt2 = DateTime.Now;
            TimeSpan span = dt2 - dt;
            Console.Write("用时:" + span.TotalSeconds);
            sbr.AppendLine("用时:" + span.TotalSeconds);
            File.WriteAllText("d:\\leters.txt", sbr.ToString());
            Console.Read();
           
        }
        private static string GetNextLeter(string number)
        {
            if (string.IsNullOrEmpty(number))
            {
                return "A001";
            }


            String pre = Regex.Replace(number, "[^a-zA-Z]", ""); // number.replaceAll("[^a-zA-Z]", "");// 获取字母部分
            String counterStr = Regex.Replace(number, "[^0-9]", "");// number.replaceAll("[^0-9]", "");
            // 字符+数字
            if (!string.IsNullOrEmpty(counterStr))
            {
                int counter = int.Parse(counterStr);// 获取数字部分
                counter++;
                if (!CheckNumGreaterMax(pre, counter, ref counterStr))
                {
                    return pre + counterStr;
                }


                // A999->AB01
                pre = letterCounter(pre);
                if (pre.Length > 4)
                {
                    return "";
                }
                if (pre.Length < 4)
                {
                    string s = "1";
                    s = s.PadLeft(4 - pre.Length, '0');
                    pre += s;
                }
                return pre;
            }
            String str = letterCounter(pre);
            return str;
        }


        private static bool CheckNumGreaterMax(string pre, int counter, ref string counterStr)
        {
            int preL = pre.Length;
            int maxConter = 0;
            String str = "";
            switch (preL)
            {
                case 1:
                    maxConter = 999;
                    str = counter.ToString().PadLeft(3, '0'); //String.format("%03d", counter);
                    break;
                case 2:
                    maxConter = 99;
                    str = counter.ToString().PadLeft(2, '0');
                    break;
                case 3:
                    maxConter = 9;
                    str = counter.ToString();
                    break;
            }


            if (counter > maxConter)
            {
                return true;
            }
            counterStr = str;
            return false;
        }


        private static string letterCounter(String str)
        {
            int len = str.Length;
            int startI = len - 1;
            String tempA = "";
            String tempB = "";
            while (true)
            {
                tempA = "";
                if (startI > 0)
                {
                    tempA = str.Substring(0, len - 1);
                }
                //Z999->ZA
                if (startI < 0 && len == 0)
                {
                    tempA = str;
                    tempB = "A";
                    break;
                }
                else
                {
                    tempB = str.Substring(startI, 1);
                    int lastCode = Asc(tempB);
                    lastCode++;
                    if (lastCode <= 90)
                    {
                        tempB = Chr(lastCode);
                        break;
                    }
                    startI--;
                    len--;
                }
            }


            String newStr = tempA + tempB;
            while (newStr.Length < str.Length)
            {
                newStr += "A";
            }
            return newStr;
        }


        public static int Asc(string character)
        {
            if (character.Length == 1)
            {
                System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
                int intAsciiCode = (int)asciiEncoding.GetBytes(character)[0];
                return (intAsciiCode);
            }
            else
            {
                throw new Exception("Character is not valid.");
            }


        }


        public static string Chr(int asciiCode)
        {
            if (asciiCode >= 0 && asciiCode <= 255)
            {
                System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
                byte[] byteArray = new byte[] { (byte)asciiCode };
                string strCharacter = asciiEncoding.GetString(byteArray);
                return (strCharacter);
            }
            else
            {
                throw new Exception("ASCII Code is not valid.");
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值