我有三个变量声明为字符串,有没有办法随机选择一个?

时间:2015-01-21 12:58:18

标签: vb.net

我有三个字符串,sUpperCase,sLowerCase和sNumbers。每个都有较低的字符,较高的字符或数字。我需要知道如何随机选择其中一个字符串。我想也许可以给他们分配一个数字,但我不知道如何做到这一点而不覆盖他们内部的文本。也许甚至是阵列,但我也不确定如何做到这一点。有人可以帮忙吗?

Dim sLowerCase As String = "qwertyuiopasdfghjklzxcvbnm"
Dim sUpperCase As String = "MNBVCXZLKJHGFDSAPOIUYTREWQ"
Dim sNumbers   As String = "1234567890"

解答:

 Function GeneratePassword() As String
        '
        ' Declare two strings as the characters which the password can be created from
        Dim sLowerCase As String = "qwertyuiopasdfghjklzxcvbnm"
        Dim sUpperCase As String = "MNBVCXZLKJHGFDSAPOIUYTREWQ"
        Dim sNumbers As String = "1234567890"

        ' Create a new random. 
        ' Random is something which gets a random set of characters from a string. 
        Dim random As New Random

        '
        ' Create sPassword as a new stringbuilder
        ' A stringbuilder is simply a class which builds a string from multiple characters
        Dim sPassword As New StringBuilder

        ' Not random enough
        'For i As Integer = 1 To 4
        '    Dim idxUpper As Integer = random.Next(0, sUpperCase.Length - 1)
        '    sPassword.Append(sUpperCase.Substring(idxUpper, 1))
        '    Dim idxNumber As Integer = random.Next(0, sNumbers.Length - 1)
        '    sPassword.Append(sNumbers.Substring(idxNumber, 1))
        '    Dim idxLower As Integer = random.Next(0, sLowerCase.Length - 1)
        '    sPassword.Append(sLowerCase.Substring(idxLower, 1))
        'Next


        ' Random select Upper, lower or numeric
        ' Check for a max number of this(three if's to check for which one it was, might need or in if)
        ' If yes randomly select another one
        ' If no get random char from that type
        ' Add to password
        ' Is the password complete?
        ' If yes return password, if not repeat

        Dim iCountUpper As Integer = 0
        Dim iCountLower As Integer = 0
        Dim iCountNumber As Integer = 0

        Do Until sPassword.Length = 10
            'Needed help for this bit
            Dim x = New Random(Now.GetHashCode)
            Dim y = {"sLowerCase", "sUpperCase", "sNumbers"}
            Dim z = y(x.Next(0, y.Length))

            If z.Contains("sLowerCase") And iCountUpper < 4 Then

                Dim idxUpper As Integer = random.Next(0, sUpperCase.Length - 1)
                sPassword.Append(sUpperCase.Substring(idxUpper, 1))
                iCountUpper = iCountUpper + 1

            ElseIf z.Contains("sUpperCase") And iCountLower < 4 Then
                Dim idxLower As Integer = random.Next(0, sLowerCase.Length - 1)
                sPassword.Append(sLowerCase.Substring(idxLower, 1))
                iCountLower = iCountLower + 1

            ElseIf z.Contains("sNumbers") And iCountNumber < 2 Then
                Dim idxNumber As Integer = random.Next(0, sNumbers.Length - 1)
                sPassword.Append(sNumbers.Substring(idxNumber, 1))
                iCountNumber = iCountNumber + 1
            Else

            End If
        Loop

        '
        ' Return the password as a string
        Return sPassword.ToString

    End Function

3 个答案:

答案 0 :(得分:1)

你可以这样做:

Dim sLowerCase As String = "qwertyuiopasdfghjklzxcvbnm"
Dim sUpperCase As String = "MNBVCXZLKJHGFDSAPOIUYTREWQ"
Dim sNumbers As String = "1234567890"

Dim x = New Random(Now.GetHashCode)
Dim y = {sLowerCase, sUpperCase, sNumbers}
Dim z = y(x.Next(0, y.Length))
Debug.Print(z)

答案 1 :(得分:1)

Dim strings = {"qwertyuiopasdfghjklzxcvbnm", "MNBVCXZLKJHGFDSAPOIUYTREWQ", "1234567890"}

Dim selected As String
Dim Generator As System.Random = New System.Random()
selected = strings(Generator.Next(0, strings.GetUpperBound(0)))

答案 2 :(得分:1)

使用您的字符串创建一个数组:

Dim array As String() = New String() {sLowerCase, sUpperCase, sNumbers}

使用Random类生成0到数组长度之间的随机数:

Dim random As Random = New Random(DateTime.Now.Ticks)
Dim randomChoose As String = array(random.Next(0, array.Length - 1))

选择随机字符:

Dim ch As Char = randomChoose(random.Next(0, randomChoose.Length - 1))