24

我有一些字符:

chars = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&".ToCharArray();

现在我正在寻找一种从这些中返回随机字符的方法。

我找到了一个可能有用的代码:

static Random random = new Random();
        public static char GetLetter()
        {
            // This method returns a random lowercase letter
            // ... Between 'a' and 'z' inclusize.
            int num = random.Next(0, 26); // Zero to 25
            char let = (char)('a' + num);
            return let;
        }

此代码返回我一个随机字符形式的字母但只返回我小写字母

4

11 回答 11

39

好吧,你快到了 - 你想从字符串中返回一个随机元素,所以你只需在字符串长度范围内生成一个随机数:

public static char GetRandomCharacter(string text, Random rng)
{
    int index = rng.Next(text.Length);
    return text[index];
}

顺便说一句,我建议不要使用没有任何锁定static的类型变量-不是线程安全的。有关更多详细信息(和解决方法),请参阅我关于随机数的文章。RandomRandom

于 2013-03-06T13:54:27.543 回答
13

这可能对您有用:

public static char GetLetter()
{
    string chars = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&";
    Random rand = new Random();
    int num = rand.Next(0, chars.Length);
    return chars[num];
}
于 2013-03-06T14:00:18.660 回答
5

你可以像这样使用它;

char[] chars = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&".ToCharArray();
Random r = new Random();
int i = r.Next(chars.Length);
Console.WriteLine(chars[i]);

这是一个DEMO.

于 2013-03-06T13:56:26.870 回答
3

请使用 CHARS 缓冲区的大小而不是 26。

int num = random.Next(0, chars.Length)

然后代替

let = (char)('a' + num)

利用

let = chars[num]
于 2013-03-06T13:58:47.770 回答
3

我有一个大概的问题,我是通过这种方式做到的:

public static String GetRandomString()
{
    var allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789";
    var length = 15;

    var chars = new char[length];
    var rd = new Random();

    for (var i = 0; i < length; i++)
    {
        chars[i] = allowedChars[rd.Next(0, allowedChars.Length)];
    }

    return new String(chars);
}
于 2013-03-06T13:59:29.783 回答
3

我不确定它的效率如何,因为我对编码很陌生,但是,为什么不直接利用你已经创建的随机数呢?这不会“随机化”大写字符吗?

    int num = random.Next(0,26);           
    char let = (num > 13) ? Char.ToUpper((char)('a' + num)) : (char)('a' + num);

另外,如果你想从你的 char[] 中取出一个字母,那么只使用一个字符串会更容易吗?

    string charRepo = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&"; 
    Random rando = new Random();
    int ranNum = rando.Next(0, charRepo.Length);

    char ranChar = charRepo[ranNum];
于 2018-06-22T13:19:47.220 回答
2
private static void Main(string[] args)
        {
            Console.WriteLine(GetLetters(6));
            Console.ReadLine();
        }

        public static string GetLetters(int numberOfCharsToGenerate)
        {
            var random = new Random();
            char[] chars = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&".ToCharArray();

            var sb = new StringBuilder();
            for (int i = 0; i < numberOfCharsToGenerate; i++)
            {
                int num = random.Next(0, chars.Length);
                sb.Append(chars[num]);
            }
            return sb.ToString();
        }
于 2013-03-06T13:54:53.600 回答
2

您的代码很好,您只需将 'a' 更改为 'A'

static Random random = new Random();
        public static char GetLetter()
        {
            // This method returns a random lowercase letter
            // ... Between 'a' and 'z' inclusize.
            int num = random.Next(0, 26); // Zero to 25
            char let = (char)('A' + num);
            return let;
        } 

此代码与问题中提到的相同,只是更改char let = (char)('A' + num);,它返回大写字母。

谢谢!!!

于 2019-09-24T13:19:48.760 回答
1

我希望这段代码可以帮助你:

 string s = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&";
            Random random = new Random();
            int num = random.Next(0, s.Length -1);
            MessageBox.Show(s[num].ToString());
于 2013-03-06T13:58:56.317 回答
1

从 ASCII 数字中获取字符:

private string GenerateRandomString()
{
Random rnd = new Random();
string txtRand = string.Empty;
for (int i = 0; i <8; i++) txtRand += ((char)rnd.Next(97, 122)).ToString();
return txtRand;
}
于 2016-04-28T00:22:07.000 回答
0

你可以试试这个:

 public static string GetPassword()
 {
string Characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 Random rnd = new Random();
int index = rnd.Next(0,51);
string char1 = Characters[index].ToString();
return char1;
  }

现在您可以根据自己的意愿使用此代码块。干杯!

于 2017-09-04T10:47:29.750 回答