我想使用VB.NET替换文本框中的每个字母或数字。这是我的第一次尝试,但一次只能替换一个字母:
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Select Case True
Case TextBox1.Text.Contains("a")
TextBox1.Text = TextBox1.Text.Replace("a", "h")
Case TextBox1.Text.Contains("b")
TextBox1.Text = TextBox1.Text.Replace("b", "o")
Case TextBox1.Text.Contains("c")
TextBox1.Text = TextBox1.Text.Replace("c", "t")
Case TextBox1.Text.Contains("d")
TextBox1.Text = TextBox1.Text.Replace("d", "e")
Case TextBox1.Text.Contains("e")
TextBox1.Text = TextBox1.Text.Replace("e", "i")
Case TextBox1.Text.Contains("f")
TextBox1.Text = TextBox1.Text.Replace("f", "a")
Case TextBox1.Text.Contains("g")
TextBox1.Text = TextBox1.Text.Replace("g", "j")
Case TextBox1.Text.Contains("h")
TextBox1.Text = TextBox1.Text.Replace("h", "f")
Case TextBox1.Text.Contains("i")
TextBox1.Text = TextBox1.Text.Replace("i", "k")
Case TextBox1.Text.Contains("j")
TextBox1.Text = TextBox1.Text.Replace("j", "b")
Case TextBox1.Text.Contains("k")
TextBox1.Text = TextBox1.Text.Replace("k", "n")
Case TextBox1.Text.Contains("l")
TextBox1.Text = TextBox1.Text.Replace("l", "r")
Case TextBox1.Text.Contains("m")
TextBox1.Text = TextBox1.Text.Replace("m", "d")
Case TextBox1.Text.Contains("n")
TextBox1.Text = TextBox1.Text.Replace("n", "s")
Case TextBox1.Text.Contains("o")
TextBox1.Text = TextBox1.Text.Replace("o", "u")
Case TextBox1.Text.Contains("p")
TextBox1.Text = TextBox1.Text.Replace("p", "g")
Case TextBox1.Text.Contains("q")
TextBox1.Text = TextBox1.Text.Replace("q", "w")
Case TextBox1.Text.Contains("r")
TextBox1.Text = TextBox1.Text.Replace("r", "m")
Case TextBox1.Text.Contains("s")
TextBox1.Text = TextBox1.Text.Replace("s", "q")
Case TextBox1.Text.Contains("t")
TextBox1.Text = TextBox1.Text.Replace("t", "x")
Case TextBox1.Text.Contains("u")
TextBox1.Text = TextBox1.Text.Replace("u", "c")
Case TextBox1.Text.Contains("v")
TextBox1.Text = TextBox1.Text.Replace("v", "y")
Case TextBox1.Text.Contains("w")
TextBox1.Text = TextBox1.Text.Replace("w", "z")
Case TextBox1.Text.Contains("x")
TextBox1.Text = TextBox1.Text.Replace("x", "l")
Case TextBox1.Text.Contains("y")
TextBox1.Text = TextBox1.Text.Replace("y", "v")
Case TextBox1.Text.Contains("z")
TextBox1.Text = TextBox1.Text.Replace("z", "p")
end select
end sub
这不是我想要的,所以我尝试了这个:
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
If TextBox1.Text.Contains("a") Then
TextBox1.Text = TextBox1.Text.Replace("a", "h")
End If
If TextBox1.Text.Contains("b") Then
TextBox1.Text = TextBox1.Text.Replace("b", "o")
End If
If TextBox1.Text.Contains("c") Then
TextBox1.Text = TextBox1.Text.Replace("c", "t")
End If
If TextBox1.Text.Contains("d") Then
TextBox1.Text = TextBox1.Text.Replace("d", "e")
End If
If TextBox1.Text.Contains("e") Then
TextBox1.Text = TextBox1.Text.Replace("e", "i")
End If
If TextBox1.Text.Contains("f") Then
TextBox1.Text = TextBox1.Text.Replace("f", "a")
End If
If TextBox1.Text.Contains("g") Then
TextBox1.Text = TextBox1.Text.Replace("g", "j")
End If
If TextBox1.Text.Contains("h") Then
TextBox1.Text = TextBox1.Text.Replace("h", "f")
End If
If TextBox1.Text.Contains("i") Then
TextBox1.Text = TextBox1.Text.Replace("i", "k")
End If
If TextBox1.Text.Contains("j") Then
TextBox1.Text = TextBox1.Text.Replace("j", "b")
End If
If TextBox1.Text.Contains("k") Then
TextBox1.Text = TextBox1.Text.Replace("k", "n")
End If
If TextBox1.Text.Contains("l") Then
TextBox1.Text = TextBox1.Text.Replace("l", "r")
End If
If TextBox1.Text.Contains("m") Then
TextBox1.Text = TextBox1.Text.Replace("m", "d")
End If
If TextBox1.Text.Contains("n") Then
TextBox1.Text = TextBox1.Text.Replace("n", "s")
End If
If TextBox1.Text.Contains("o") Then
TextBox1.Text = TextBox1.Text.Replace("o", "u")
End If
If TextBox1.Text.Contains("p") Then
TextBox1.Text = TextBox1.Text.Replace("p", "g")
End If
If TextBox1.Text.Contains("q") Then
TextBox1.Text = TextBox1.Text.Replace("q", "w")
End If
If TextBox1.Text.Contains("r") Then
TextBox1.Text = TextBox1.Text.Replace("r", "m")
End If
If TextBox1.Text.Contains("s") Then
TextBox1.Text = TextBox1.Text.Replace("s", "q")
End If
If TextBox1.Text.Contains("t") Then
TextBox1.Text = TextBox1.Text.Replace("t", "x")
End If
If TextBox1.Text.Contains("u") Then
TextBox1.Text = TextBox1.Text.Replace("u", "c")
End If
If TextBox1.Text.Contains("v") Then
TextBox1.Text = TextBox1.Text.Replace("v", "y")
End If
If TextBox1.Text.Contains("w") Then
TextBox1.Text = TextBox1.Text.Replace("w", "z")
End If
If TextBox1.Text.Contains("x") Then
TextBox1.Text = TextBox1.Text.Replace("x", "l")
End If
If TextBox1.Text.Contains("y") Then
TextBox1.Text = TextBox1.Text.Replace("y", "v")
End If
If TextBox1.Text.Contains("z") Then
TextBox1.Text = TextBox1.Text.Replace("z", "p")
End If
end sub
它也不起作用,一次只能写一个字母。
我希望能够在文本框中编写例如“ bike”,并且它将同一文本框(或另一个文本框)中的文本替换为“ pawm”,但我不能看看问题出在哪里。
答案 0 :(得分:3)
正如您所发现的那样,替换整个文本不起作用,因为一个字母可以被多次替换。例如,“ b”被替换为“ p”,但是稍后您将“ p”替换为“ h”。
您要逐个字符替换。这是一个示例:
Imports System.Collections.Generic
Imports System.Linq
Dim replacement = New Dictionary(Of Char, Char) From
{
{"b"c, "p"c},
{"i"c, "a"c},
{"k"c, "w"c},
{"e"c, "m"c}
}
Dim word = "bike"
'For each character, we select the replacement letter
Dim letters = word.Select(Function(c) replacement(c)).ToArray()
'Construct a new string with the replaced letters
Dim newWord = New String(letters)
答案 1 :(得分:2)
想象一下,密码只是a-> b,b-> c,c-> d。现在,如果单词是“ abc”,那么我们将所有a-> b更改为“ bbc”,然后将所有b-> c更改为“ ccc”,然后将所有c-> d更改为“ ddd” 。这不是我们想要的!相反,我们需要创建一个新的字母字符串,所以有一个我们知道的以“ b”结尾的“ a”:到目前为止,新字符串是“ b”。然后我们查看“ abc”中的“ b”,我们知道它将变为“ c”,因此将其附加到新字符串中以获得“ bc”,最后我们查看“ abc”中的“ c”,将其翻译为“ d”,将其附加到新字符串中,然后获取“ bcd”。这是我们想要的,因此我们找到了一种进行加密的方法。
因此,我们现在需要一种从用户输入的字母到加密的字母来查找翻译的方法。
如果我们按字母顺序排列了一个字母字符串,则可以使用String.IndexOf函数在该字符串中查找字母的位置。因此,如果我们要求它作为“ abcdefghijklmnopqrstuvwxyz”中“ c”的索引,它将为我们提供数字2。之所以为2,是因为它从0开始而不是从1开始计数。现在,如果我们有一个带有加密字符的字符串,我们可以通过它在指定的位置查找该字符,因此,我们在字符串“ ypsvmdgjatwnqzkhebxurolifc”中以索引2查找该字符,并得到“ s”。 / p>
现在,最好将一小段代码放在自己的方法中(这意味着如果需要更正或更改,您可以专注于一小段代码),在这种情况下,制作一个函数,该函数提供要加密的字符串,并返回加密的字符串。
因此,将这些部分放在一起,我得到了:
Function Encipher(s As String) As String
Dim normal = "abcdefghijklmnopqrstuvwxyz"
Dim cipher = "ypsvmdgjatwnqzkhebxurolifc"
' Make the uppercase versions too
normal = normal & normal.ToUpper()
cipher = cipher & cipher.ToUpper()
Dim newString = ""
For Each c In s
Dim arrayIndex = normal.IndexOf(c)
If arrayIndex >= 0 Then
Dim cipherChar = cipher.Chars(arrayIndex)
newString &= cipherChar
Else
newString &= c
End If
Next
Return newString
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button2.Click
TextBox1.Text = Encipher(TextBox1.Text)
End Sub
If arrayIndex >= 0 Then
部分检查是否实际找到了该字符,否则,Else
部分附加未更改的字符。
答案 2 :(得分:0)
这完全有效
Dim newString As System.Text.StringBuilder = New System.Text.StringBuilder()
For Each character As Char In RichTextBox1.Text
If character = "a"c Then
newString.Append(Chr(104))
ElseIf character = "b"c Then
newString.Append(Chr(111))
ElseIf character = "c"c Then
newString.Append(Chr(116))
ElseIf character = "d"c Then
newString.Append(Chr(101))
ElseIf character = "e"c Then
newString.Append(Chr(105))
ElseIf character = "f"c Then
newString.Append(Chr(97))
ElseIf character = "g"c Then
newString.Append(Chr(108))
ElseIf character = "h"c Then
newString.Append(Chr(102))
ElseIf character = "i"c Then
newString.Append(Chr(107))
ElseIf character = "j"c Then
newString.Append(Chr(98))
ElseIf character = "k"c Then
newString.Append(Chr(110))
ElseIf character = "l"c Then
newString.Append(Chr(114))
ElseIf character = "m"c Then
newString.Append(Chr(100))
ElseIf character = "n"c Then
newString.Append(Chr(115))
ElseIf character = "o"c Then
newString.Append(Chr(117))
ElseIf character = "p"c Then
newString.Append(Chr(103))
ElseIf character = "q"c Then
newString.Append(Chr(119))
ElseIf character = "r"c Then
newString.Append(Chr(109))
ElseIf character = "s"c Then
newString.Append(Chr(113))
ElseIf character = "t"c Then
newString.Append(Chr(120))
ElseIf character = "u"c Then
newString.Append(Chr(99))
ElseIf character = "v"c Then
newString.Append(Chr(121))
ElseIf character = "w"c Then
newString.Append(Chr(122))
ElseIf character = "x"c Then
newString.Append(Chr(108))
ElseIf character = "y"c Then
newString.Append(Chr(118))
ElseIf character = "z"c Then
newString.Append(Chr(112))
ElseIf character = " "c Then
newString.Append(Chr(32))
Else
newString.Append(Chr(Asc(character) + 2))
End If
Next
RichTextBox1.Text = newString.ToString()