我正在尝试删除两个字符串之间的常用字符。我的问题是for each循环没有删除strname
和strname2
之间的正确字符。
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
答案 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