生成指定长度随机字符串函数

从给出的备选字符或者字符区间中随机抽取字符组成所需要的字符串

 

内容

1、              对于备选字符的问题,给出两种解决方案:

²        列出所有符合要求的字符组成字符串传入(Code1

优点:可任意列出需要的字符,简洁明了

缺点:备选字符较多时一一罗列比较麻烦

²        给出一个字符区间(Code2

优点:不需要一一罗列所有所需要的字符,方便快捷

缺点:不能满足对一些特殊字符的取舍,如需要选取的字符不属于一个区间内的情况

²        一个标准的字符文件(Code3

优点:适合有大批量备选字符及多种特殊字符(各种不常见的字符、各种国家文字)

缺点:一般没有这种需求

 

2、              当抽取备选字符时,有以下两种操作方式:

²        通过Substring方法从给定的字符串中抽取字符,用StringBuilder拼出字符串返回(Code1

²        通过Substring方法从给定的字符串中抽取字符,用+=拼出字符串返回

²        从数组中抽取字符,采用Char[]数组存储(Code4

通过测试发现,在循环10000次以下时这三种方式的执行时间都可以忽略不计,当需要的字符长度达到100000时,用+拼接字符串的效率是很低的。以下是测试结果:(单位:秒)

codeCount

byte[]

+=

StringBuilder

 10000

0.015625

0.28125

0.015625

100000

0.03125

36.921875

0.078125

1000000

0.171875

——

0.609375

10000000

1.671875

5.953125

 

Code1

                /// <summary>

                ///  随机生成字符串

                /// </summary>

                /// <param name="codeCount">字符串个数</param>

                /// <param name="baseString">备选字符组成的字符串</param>

                /// <returns>随机生成的字符串</returns>

                private string GenerateCodeFromString(int codeCount,string baseString)

                {

                        int number;

                        int length = baseString.Length;

                        StringBuilder result = new StringBuilder();

                        System.Random random = new Random();

                        for(int i=0; i<codeCount; i++)

                        {

                                number = random.Next(length);

                                result.Append(baseString.Substring(number,1));

                        }

                        return result.ToString();

                }

 

Code2

                /// <summary>

                /// 随机生成字符串

                /// </summary>

                /// <param name="codeCount">字符串个数</param>

                /// <param name="startCode">起始备选字符</param>

                /// <param name="endCode">结束备选字符</param>

                /// <returns>随机生成的字符串</returns>

                private string GenerateCodeFromRange(int codeCount,char startCode,char endCode)

                {

                        int number;

                        StringBuilder result = new StringBuilder(codeCount);

                        int length = endCode - startCode + 1;

                        char code = 'a';

                        System.Random random = new Random();

                        for(int i=0; i<codeCount; i++)

                        {

                                number = random.Next(length);

                                code = (char)(startCode + (char)(number));

                                result.Append(code.ToString());

                        }

                        return result.ToString();

                }

 

Code3

                /// <summary>

                ///  随机生成字符串

                /// </summary>

                /// <param name="codeCount">字符串个数</param>

                /// <param name="fileName">标准的字符文件路径</param>

                /// <returns>随机生成的字符串</returns>

                private string GenerateCodeFromFile(int codeCount,string filePath)

                {

                        int number;

                        StreamReader stream = new StreamReader(filePath,System.Text.Encoding.Default);

                        string s = stream.ReadToEnd();

                        int length = s.Length;

                        StringBuilder result = new StringBuilder(codeCount);

                        System.Random random = new Random();

                        for(int i=0; i<codeCount; i++)

                        {

                                number = random.Next(length);

                                result.Append(s.Substring(number,1));

                        }

                        return result.ToString();

                }

 

Code4

                /// <summary>

                /// 随机生成字符串

                /// </summary>

                /// <param name="codeCount">字符串个数</param>

                /// <param name="chars">备选字符数组</param>

                /// <returns>随机生成的字符串</returns>

                private string GenerateCodeFromArray(int codeCount,char[] chars)

                {

                        int number;

                        char[] tempChars = new char[codeCount];

                        int length = chars.Length;                     

                        System.Random random = new Random();

                        for(int i=0; i<codeCount; i++)

                        {

                                number = random.Next(length);

                                tempChars[i] = chars[number];                          

                        }

                        String result = new String(tempChars);

                        return result.ToString();                      

                }

 

总结

根据本函数的需求,需要随机抽取的字符串长度一般不会很大,所以无论采用哪种方式都可以接受。而根据情况给出多种接口形式供选择。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值