2

友人から、彼女がプレイするゲームの文字列ランダマイザを作成するように依頼されました。私はコードを機能させましたが、今では文字を 3 文字ごとにダッシュ (またはスペース) で区切ろうとしていますが、機能させることができません。どんな助けでも大歓迎です。

            For x As Integer = 1 To 10
                  strb.Append(chars(Int(Rnd() * UpperBound)))
          If x Mod 2 = 0 Then 
          strb.Append("-")

文字を区切る必要がありますが、ランダム化された文字の末尾にダッシュが追加されないようにするにはどうすればよいですか?

みんな(そして女の子)、助けてくれてありがとう

4

4 に答える 4

2

3文字ごとにダッシュ(または何でも)を追加するだけです:

For x As Integer = 1 To 5
  strb.Append(chars(Int(Rnd() * UpperBound)))
  If x Mod 3 = 0 Then      
    strb.Append("-")
  End If
Next
于 2012-04-20T11:59:17.070 に答える
1

私はこれらの古い VB 関数をまだ使用していないので、C# に簡単に変換できる VB.NET でそれを行う方法を紹介します。

Private Function RandomString(rnd As Random, size As Integer) As String
    Dim chars() As String = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
    Dim builder As New System.Text.StringBuilder()
    For i As Integer = 0 To size - 1
        builder.Append(chars(rnd.Next(0, chars.Length)))
    Next

    Return builder.ToString()
End Function

5 文字のランダムな文字列を生成してみましょう。

Dim rnd = New Random()
Dim rndString = RandomString(rnd, 5)

それ以来、ランダムインスタンスを渡していることに注意してください。メソッドで作成してループで呼び出すと、Randomシードと同じ時間を使用するため、同じ文字列が生成されます。

編集:結果を分離する必要があることだけを見てきました。オーバーロードされたバージョンを使用できます。

Private Overloads Function RandomString(rnd As Random, size As Integer, separator As String, everyNChar As Int32) As String
    Dim builder = New System.Text.StringBuilder()
    Dim chars() As String = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
    For i As Integer = 0 To size - 1
        If i > 0 AndAlso i Mod everyNChar = 0 Then
            builder.Append(chars(rnd.Next(0, chars.Length))).Append(separator)
        Else
            builder.Append(chars(rnd.Next(0, chars.Length)))
        End If
    Next

    Return builder.ToString()
End Function

これはセパレータをカウントしないことに注意してください。

于 2012-04-20T12:08:09.020 に答える
0

正規表現を使用して文字列を置き換えることができます。正規表現を変更して変更リクエストを管理するのは簡単です:)

に置き換えるだけTextBox1.Text = rndstringです:

TextBox1.Text = Regex.Replace(rndstring, "[a-zA-Z0-9]{3}", "$& ")

Imports System.Text.RegularExpressionsまだ行っていない場合は、追加する必要があることに注意してください。

編集: 3文字ごとに「」(空白)を挿入する上記の解決策を提供しました。ハイフン (-) が必要な場合は、2 番目の正規表現を次のように変更します。"$&-"

于 2012-04-20T12:23:24.173 に答える
0

私の理解が正しければ、if ステートメントを からIf x Mod 2 = 0 Thenに変更してくださいIf x Mod 2 = 0 And x <> 10 Then。そうすれば、ダッシュが最後の要素にある場合、ダッシュを追加しません。

于 2012-04-21T04:31:16.213 に答える