删除两个字符串之间的常用字符

时间:2014-10-16 12:00:41

标签: vb.net

我正在尝试删除两个字符串之间的常用字符。我的问题是for each循环没有删除strnamestrname2之间的正确字符。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button3.Click
Dim strname, strname2 As String
Dim r As Double
strname = TextBox1.Text
strname2 = TextBox2.Text
For Each c As Char In strname
    If (strname2.IndexOf(c) > -1) Then
        strname2 = strname2.Remove(strname2.IndexOf(c), 1)
        strname = strname.Remove(strname.IndexOf(c), 1)
    End If
Next
Dim result As Double = strname.Length + strname2.Length
Label6.Text = result

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的要求,您需要做的是找到string2中存在于string2中的每个字符。对于您找到的每个角色,请从两个字符串中删除所有出现的角色。

一个选项是迭代第一个字符串中的每个字符,检查它们是否包含在第二个字符串中。这是相当低效的,因为它迭代原始字符串的每个字符而不是字符串,因为它正在被更改。因此,如果第一个字符串本身包含重复字符,它将迭代它们但在第一次传递后不执行任何操作。

Dim string1 As String = "horse"
Dim string2 As String = "donkey"

For Each c As Char In string1
    If string2.Contains(c) Then
        string1 = string1.Replace(c.ToString(), "")
        string2 = string2.Replace(c.ToString(), "")
    End If
Next

另一种选择是使用LINQ来查找两个字符串的intersection。这将为您提供两个字符串之间的常见字符的明确列表。

Dim string1 As String = "horse"
Dim string2 As String = "donkey"

Dim ar() As Char = string1.Intersect(string2).ToArray()

For Each c As Char In ar
    string1 = string1.Replace(c.ToString(), "")
    string2 = string2.Replace(c.ToString(), "")
Next

编辑:如果您的字符串包含大写和小写字母,则需要手动处理,因为Replace()没有。

您可以查看this answer以了解扩展Replace()功能的几种不同方法。或者,如果您不太担心性能,只需使用ToUpper()ToLower()

For Each c As Char In string1
    If string2.Contains(c.ToString().ToLower()) Or string2.Contains(c.ToString().ToUpper()) Then
        string1 = string1.Replace(c.ToString().ToLower(), "")
        string2 = string2.Replace(c.ToString().ToLower(), "")

        string1 = string1.Replace(c.ToString().ToUpper(), "")
        string2 = string2.Replace(c.ToString().ToUpper(), "")
    End If
Next