如果我正确理解您的要求,您需要做的是找到string1中存在于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
当您从字符串中删除字符时,是否要删除所有出现的字符或只是第一次出现?如果你的书写方式有效,它只会删除第一次出现。 – 2014-10-16 13:03:22
是的,这正是我的问题,你可以帮我,我只是想通了,当我输入一个特定的字符串 例如:字符串1 =爸爸字符串2 = amm代码将删除什么都没有,因为string1的a是在索引1,而字符串2的a是索引0 – anitstudent 2014-10-16 13:11:20
是的,良好的捕获。这肯定会成为一个问题。如果你想删除所有的事件,我会建议使用'Replace()'用空字符串替换字符。 – 2014-10-16 13:15:41