Search code examples
c#stringrandommixed-case

How to get random string with spaces and mixed case?


I am in need of generating a random string with spaces and mixedCase.

This is all I got so far:

    /// <summary>
    /// The Typing monkey generates random strings - can't be static 'cause it's a monkey.
    /// </summary>
    /// <remarks>
    /// If you wait long enough it will eventually produce Shakespeare.
    /// </remarks>
    class TypingMonkey
    {
        /// <summary>
        /// The Typing Monkey Generates a random string with the given length.
        /// </summary>
        /// <param name="size">Size of the string</param>
        /// <returns>Random string</returns>
        public string TypeAway(int size)
        {
            StringBuilder builder = new StringBuilder();
            Random random = new Random();
            char ch;

            for (int i = 0; i < size; i++)
            {
                ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
                builder.Append(ch);
            }

            return builder.ToString();
        }
    }

I am getting only uppercase strings with no spaces - I believe the tweak should be pretty striaghtforward to get mixed case and spaces in the soup.

Any help greatly appreciated!


Solution

  • The easiest way to do this is to simply create a string with the following values:

    private readonly string legalCharacters = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    

    Then use the RNG to access a random element in this string:

    public string TypeAway(int size)
    {
        StringBuilder builder = new StringBuilder();
        Random random = new Random();
        char ch;
    
        for (int i = 0; i < size; i++)
        {
            ch = legalCharacters[random.Next(0, legalCharacters.Length)];
            builder.Append(ch);
        }
    
        return builder.ToString();
    }