如果我正確理解您的要求,您需要做的是找到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