如何在TextBox中搜索包含大写和小写字母的单词,然后将其替换为另一个单词

时间:2017-04-21 10:50:01

标签: vb.net

我有TextBox,其中包含更多字词

示例:

  

pRoFeSSoinaL 编码器

我想搜索单词 pRoFeSSoinaL (包含大写和小写字母),然后将其替换。

2 个答案:

答案 0 :(得分:1)

好的,让我尝试根据您的图片再次解决您的问题:

image

关于你的评论:

  

...但是我需要搜索关于单词有多个字母更改的例子(执行,执行,执行,执行........ ETC)我需要找到的单词无论字母多大小看到这个证据

同样,如果我有这个权利,你想要找到所有出现的单词而不管它是什么情况。实际上,您希望您的应用程序有点像记事本。

我已经汇总了一些将使用以下方法的代码:

  • String.ToLower
      

    返回此字符串的副本,转换为小写。

  • TextBox.Select
      

    在文本框中选择一系列文字。

  • String.Remove
      

    返回一个新字符串,其中删除了从指定位置开始的当前实例中指定数量的字符。

  • String.Insert
      

    返回一个新字符串,在该字符串中,在此实例中的指定索引位置插入指定的字符串。

  • String.Substring
      

    从此实例中检索子字符串。子字符串从指定的字符位置开始,并具有指定的长度。

我有三个Button控件,我已经放了一些代码。一个人会发现一个单词的下一个出现,另一个将替换一个单词的下一个出现,而最后一个将替换一个单词的所有出现。

现在设计你的应用程序不是我的工作,但为了方便起见,我还提供了三个TextBox控件。这就是我的表单的外观:

enter image description here

要查找professional的下一次出现,这是我使用的代码:

Private Sub btnFindNext_Click(sender As Object, e As EventArgs) Handles btnFindNext.Click

    'check word exists
    If txtTextToSearch.Text.ToLower().Contains(txtWordToFind.Text.ToLower()) Then
        'reset position if at end of text
        If txtTextToSearch.Text.ToLower().IndexOf(txtWordToFind.Text.ToLower(), position + 1) < 0 Then
            position = 0
        End If

        'set position of next occurrence
        position = txtTextToSearch.Text.ToLower().IndexOf(txtWordToFind.Text.ToLower(), position + 1)

        'select next occurrence
        txtTextToSearch.Select(position, txtWordToFind.Text.Length)
    End If

End Sub

这是单击按钮时的外观截图:

enter image description here

再次单击该按钮将选择下一个单词。在我的例子中,它将继续在两者之间切换。

要替换下一次出现的professional,这是我使用的代码:

Private Sub btnReplaceNext_Click(sender As Object, e As EventArgs) Handles btnReplaceNext.Click

    'check word exists
    If txtTextToSearch.Text.ToLower().Contains(txtWordToFind.Text.ToLower()) Then
        'reset position if at end of text
        If txtTextToSearch.Text.ToLower().IndexOf(txtWordToFind.Text.ToLower(), position + 1) < 0 Then
            position = 0
        End If

        'set position of next occurrence
        position = txtTextToSearch.Text.ToLower().IndexOf(txtWordToFind.Text.ToLower(), position + 1)

        'remove old word
        txtTextToSearch.Text = txtTextToSearch.Text.Remove(position, txtWordToFind.Text.Length())
        'insert new word
        txtTextToSearch.Text = txtTextToSearch.Text.Insert(position, txtReplaceWith.Text)
    End If

End Sub

这是单击按钮时的外观截图:

enter image description here

再次单击该按钮将替换下一个单词。

要替换所有出现的单词professional,这是我使用的代码:

Private Sub btnReplaceAll_Click(sender As Object, e As EventArgs) Handles btnReplaceAll.Click

    'check word exists
    If txtTextToSearch.Text.ToLower().Contains(txtWordToFind.Text.ToLower()) Then
        'reset position if at end of text
        If txtTextToSearch.Text.ToLower().IndexOf(txtWordToFind.Text.ToLower(), position + 1) < 0 Then
            position = 0
        End If

        'set position of next occurrence
        position = txtTextToSearch.Text.ToLower().IndexOf(txtWordToFind.Text.ToLower(), position + 1)

        While position > 0 AndAlso position < txtTextToSearch.Text.Length

            'remove old word
            txtTextToSearch.Text = txtTextToSearch.Text.Remove(position, txtWordToFind.Text.Length())
            'insert new word
            txtTextToSearch.Text = txtTextToSearch.Text.Insert(position, txtReplaceWith.Text)

            'set position of next occurrence
            position = txtTextToSearch.Text.ToLower().IndexOf(txtWordToFind.Text.ToLower(), position + 1)
        End While
    End If

End Sub

这是单击按钮时的外观截图:

enter image description here

我的代码需要适应我确定,但它应该给你一些东西继续。至于我去过的详细程度,可能不会让你受益,但可能会让访问这个问题的其他人受益。希望这会有所帮助。

答案 1 :(得分:0)

从屏幕截图(http://i.imgur.com/77wdZoI.png)判断,您似乎是在不区分大小写的字符串匹配之后。

最简单的方法是使用String.IndexOf(String, StringComparison) overload执行不区分大小写的比较:

Private Function FindText(ByVal Source As String, ByVal Text As String) As Integer
    Return Source.IndexOf(Text, StringComparison.OrdinalIgnoreCase)
End Function

用法示例:

Dim TextToFind As String = "professional"
Dim TextPos As Integer = FindText(TextBox1.Text, TextToFind)

If TextPos > -1 Then 'Match found.
    TextBox1.SelectionStart = TextPos
    TextBox1.SelectionLength = TextToFind.Length
End If