2014-10-16 86 views
-1

我试图删除两个字符串之间的通用字符。我的问题是,每个循环都不会删除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 
+0

当您从字符串中删除字符时,是否要删除所有出现的字符或只是第一次出现?如果你的书写方式有效,它只会删除第一次出现。 – 2014-10-16 13:03:22

+0

是的,这正是我的问题,你可以帮我,我只是想通了,当我输入一个特定的字符串 例如:字符串1 =爸爸字符串2 = amm代码将删除什么都没有,因为string1的a是在索引1,而字符串2的a是索引0 – anitstudent 2014-10-16 13:11:20

+0

是的,良好的捕获。这肯定会成为一个问题。如果你想删除所有的事件,我会建议使用'Replace()'用空字符串替换字符。 – 2014-10-16 13:15:41

回答

0

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

非常感谢你现在的工作感谢您的亲爱的时间 – anitstudent 2014-10-16 14:14:13

+0

不客气。很高兴我能帮上忙。 – 2014-10-16 14:15:41

+0

只是在你读了这个可以帮助我多一次,如果我输入大写字母和该大写字母常见的字母小写它不会取消它我尝试使用此代码将该字母小写,但小写它看起来不像它工作如果strname.IndexOf(0).ToString.ToUpper然后 TextBox1.Text.ToLower() End If If strname2.IndexOf(0).ToString.ToUpper Then textbox2.text。 ToLower() End If – anitstudent 2014-10-16 16:51:14

相关问题