我需要一种方法以以下格式返回随机字符串:
字母数字 字母数字 字母数字
假设您不需要它是线程安全的:
private static readonly Random rng = new Random();
private static RandomChar(string domain)
{
int selection = rng.Next(domain.Length);
return domain[selection];
}
private static char RandomDigit()
{
return RandomChar("0123456789");
}
private static char RandomLetter()
{
return RandomChar("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
}
public static char RandomStringInSpecialFormat()
{
char[] text = new char[6];
char[0] = RandomLetter();
char[1] = RandomDigit();
char[2] = RandomLetter();
char[3] = RandomDigit();
char[4] = RandomLetter();
char[5] = RandomDigit();
return new string(text);
}
(您可以在 RandomStringInSpecialFormat 中使用 3 次迭代循环,但它没有太多好处。)
如果您需要它是线程安全的,您将需要某种方法来确保您不会同时从多个线程访问 Random。最简单的方法(在我看来)是使用MiscUtil中的StaticRandom。
你只需要2个方法。
1)随机一个字符(您可以使用ASCII在数字之间随机而不是强制转换为字符)
2) 随机数。
两者都可以使用此实用方法:
private int RandomNumber(int min, int max)
{
Random random = new Random();
return random.Next(min, max);
}
对于您需要拨打的字母RandomNumber(65,90);
和您拨打的号码:RandomNumber(1,9);
您只需连接。
比你调用这些方法来创建你的字符串,希望这对你有帮助。
您应该将随机对象放在您的班级中......这只是为了向您展示如何做到这一点。您仍然需要做一些工作,但我认为这是向您展示如何从 ascii 操作 char 的一个好的开始。
public static string RandomString(Random rand, int length)
{
char[] str = new char[length];
for (int i = 0; i < length; i++)
{
if (i % 2 == 0)
{ //letters
str[i] = (char)rand.Next(65, 90);
}
else
{
//numbers
str[i] = (char)rand.Next(48, 57);
}
}
return new string(str);
}
也许这会更具可读性...
if (i % 2 == 0)
{
//letters
str[i] = (char)rand.Next('A', 'Z');
}
else
{
//numbers
str[i] = (char)rand.Next('0', '9');
}
class Program
{
static void Main(string[] args)
{
Random r = new Random();
for(int i = 0;i<25;i++)
Console.WriteLine(RandomString(r,6));
Console.Read();
}
public static string RandomString(Random rand, int length)
{
char[] str = new char[length];
for (int i = 0; i < length; i++)
str[i] = (char)rand.Next(65 - (17 * (i % 2)), 91-(33 * (i % 2)));
return new string(str);
}
}
然后只需使用 Random.NextBytes 函数和 Encoding.ASCII.GetString() 来生成字符。
或者,或者,生成一个字符串或字符数组 (string[]) 并使用 Random.Next(0,array.Length) 来获取它的索引。
使用 StringBuilder 和 Random.Next(0,9) 生成数字,然后通过添加数字、字符、数字等来生成字符串...