Как сделать метод для возврата случайной строки в формате A1A 1A1? - PullRequest
2 голосов
/ 21 ноября 2008

Мне нужен метод для возврата случайной строки в формате:

Буква Номер Буква Номер Буква Номер

Ответы [ 5 ]

11 голосов
/ 21 ноября 2008

Предполагается, что вам не нужен потокобезопасность:

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);
}

(Вы можете использовать 3-итерационный цикл в RandomStringInSpecialFormat, но он не имеет большого преимущества.)

Если вам нужно, чтобы он был ориентирован на многопотоковость, вам понадобится какой-то способ убедиться, что вы не обращаетесь к Random из нескольких потоков одновременно. Самый простой способ сделать это (на мой взгляд) - использовать StaticRandom из MiscUtil .

2 голосов
/ 21 ноября 2008
    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');
}
2 голосов
/ 21 ноября 2008

Вам просто нужно 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); Вам просто нужно объединить.

Чем вы вызываете эти методы для создания вашей строки, надеюсь, это поможет вам.

Обновление

Вы должны поместить случайный объект в ваш класс ... это было просто, чтобы показать вам, как это сделать. Вам все еще нужно немного поработать, но я думаю, что это хорошее начало, чтобы показать вам, как манипулировать char из ascii.

1 голос
/ 21 ноября 2008

Укороченная версия без 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);
    }
}
0 голосов
/ 21 ноября 2008

Затем просто используйте функцию Random.NextBytes вместе с Encoding.ASCII.GetString () для генерации символов.

Или, альтернативно, сгенерируйте массив String или char (string []) и используйте Random.Next (0, array.Length) для получения индекса к нему.

Используйте StringBuilder и Random.Next (0,9), чтобы сгенерировать числа, а затем сгенерировать вашу строку, добавив число, символ, число и т. Д. ...

Случайные пользователи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...