Vb.net 如何用VB语言替换字符串中字符的一个实例并将输出放在文本框中
我们试图将a的第一个实例替换为第二个第三个。然后它应该循环并将a的第二个实例替换为新生成的值first second third,并继续此循环,直到不再剩下a个字符,并且每个a都是不同的值。但是,输出结果不正确。代码正在擦除最后一个a之前的所有字符,然后替换最后一个aVb.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
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()