如何按时替换文本框中的字母

时间:2018-09-18 17:10:59

标签: vb.net

我想使用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”,但我不能看看问题出在哪里。

3 个答案:

答案 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()