2

我需要一种方法以以下格式返回随机字符串:

字母数字 字母数字 字母数字

4

5 回答 5

11

假设您不需要它是线程安全的:

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

于 2008-11-21T14:40:14.130 回答
2

你只需要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 的一个好的开始。

于 2008-11-21T14:39:58.483 回答
2
    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');
}
于 2008-11-21T14:49:57.763 回答
1

没有任何 IF 的较短版本

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);
    }
}
于 2008-11-21T15:08:10.067 回答
0

然后只需使用 Random.NextBytes 函数和 Encoding.ASCII.GetString() 来生成字符。

或者,或者,生成一个字符串或字符数组 (string[]) 并使用 Random.Next(0,array.Length) 来获取它的索引。

使用 StringBuilder 和 Random.Next(0,9) 生成数字,然后通过添加数字、字符、数字等来生成字符串...

随机成员

于 2008-11-21T14:41:20.603 回答