Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何用VB语言替换字符串中字符的一个实例并将输出放在文本框中_Vb.net_Random_Replace - Fatal编程技术网

Vb.net 如何用VB语言替换字符串中字符的一个实例并将输出放在文本框中

Vb.net 如何用VB语言替换字符串中字符的一个实例并将输出放在文本框中,vb.net,random,replace,Vb.net,Random,Replace,我们试图将a的第一个实例替换为第二个第三个。然后它应该循环并将a的第二个实例替换为新生成的值first second third,并继续此循环,直到不再剩下a个字符,并且每个a都是不同的值。但是,输出结果不正确。代码正在擦除最后一个a之前的所有字符,然后替换最后一个a Dim message As String Dim start As Integer = 1 Dim letterfinder As String Dim timesLooped As Intege

我们试图将a的第一个实例替换为第二个第三个。然后它应该循环并将a的第二个实例替换为新生成的值first second third,并继续此循环,直到不再剩下a个字符,并且每个a都是不同的值。但是,输出结果不正确。代码正在擦除最后一个a之前的所有字符,然后替换最后一个a

    Dim message As String
    Dim start As Integer = 1
    Dim letterfinder As String
    Dim timesLooped As Integer = 1
    Dim length As Integer

    Dim first As Integer
    Dim second As Integer
    Dim third As Integer
    Dim count As Integer = 1

    message = inputBox.Text
    length = Len(message)
    timesLooped = 0
  While length > timesLooped
        Dim random As New Random
        letterfinder = Mid$(message, start, 1)
        If letterfinder = "a" Then
            first = random.Next(3, 9)
            second = 1 \ first
            third = 1 - second
            outputBox.Text = Replace(message, letterfinder, first & second & third, [start], [count])
        End If
        timesLooped = timesLooped + 1
        start = start + 1
    End While

您的output.text框只是显示最终结果,临时更改发生得太快,无法看到。添加列表框以查看进度:

   If letterfinder = "a" Then
       first = random.Next(3, 9)
       second = 1 \ first
       third = 1 - second

       Dim res As String = Replace(message, letterfinder, _
                   first & second & third, [start], [count])
       txtOutput.Text = res
       ListBox1.Items.Add(timesLooped.ToString & vbTab & res)
   End If


Replace(message, "a", first & second & third, [start], [count]) 
正在返回从开始处开始的子字符串。。。它不能替代和返回整个内容。abaca第二次通过的结果是701ca。一个列表框将显示这一点。 对于ababfdsfac,替换结果为:

701babfdsfac 801bfdsfac 301c 您仅从上的当前开始值获取零件

编辑

这里有一个循环,可以满足您的需要。我使用了VB6类型的方法,因为OP代码比.Net更像那种样式

    Dim first As Integer
    Dim result As String = ""
    Dim random As New Random
    ListBox1.Items.Clear()

    For n As Integer = 1 To Len(message)
        If Mid$(message, n, 1) = "a" Then

            first = random.Next(3, 9)
            result = result & CStr(first)
            result = result & CStr(1 \ first)               ' always 0
            result = result & CStr(1 - (1 \ first))         ' always 1
        Else
            result = result & Mid$(message, n, 1)

        End If

        txtOutput.Text = result
        ListBox1.Items.Add(result)                  ' post interim results
    Next

HTH

您能提供一个输入到所需输出的示例吗?输入=abaca输出=301b401c601 gui设置有两个文本框一个文本框是输入文本框,另一个文本框是输出文本框。我想您可能误解了这个问题。我们不会在同一个字符串中替换它。我们正在创建一个由旧字符串组成的新字符串,除了a值替换为随机生成的第一个第二个第三个值外,每个a应有不同的第一个第二个第三个。请参阅我的编辑…是的,我这样做了。在每次通过或替换事件中,您仅返回从当前“a”点开始的原始字符串的一部分。非常好的解决方案抱歉,我花了这么长时间才对其进行表决,但我已经对其进行了测试,并且它的功能非常完善。谢谢你的帮助!他/她/他们没有改变输入。这也让我很吃惊。它仍然只是做最后一个a。下面是使用代码后的结果:Input=ababfdsfac Output=801c输出应该是类似Output=801b601bfdsf901cReplace的内容,返回从[start]开始的子字符串。请参阅我的新编辑。您的最后一条评论帮助我更好地理解当前的问题。谢谢
DIM randomNum = Function(i)
                  Dim r as new Random(3,9)
                  Dim num = String.Format("{0}01",r.Next().ToString)
                  Return num
                End Function

Dim output as new StringBuilder()

inputText.
    ToCharArray().
    ToList().
    ForEach(Sub(c)
              if c.equals("a"c) Then 
                  output.Append(randomNum())
              Else
                  output.Append(c)
              End If)
txtOutput.Text = output.ToString()