2010-07-29 197 views
1

有一封電子郵件,想要從中刪除第一個「@」符號,然後確保它在第二次檢查時沒有多於一個。這是目前我正在做的事情。從字符串中刪除「@」

Dim tempEmail As String = ContactEmail 
Dim count As Integer = 0 
If tempEmail.IndexOf("@") <> -1 Then 'check for one 
    count += 1 
    tempEmail.Remove(tempEmail.IndexOf("@"), 1) 
End If 
If tempEmail.IndexOf("@") <> -1 Then 'check for two 
    count += 1 
End If 

If count = 1 Then 
    JustifyString(ContactEmail, 66, " ", LEFT_JUSTIFY) 
Else 
    ContactEmail = BLANK_EMAIL 
End If 

但調試後,我發現它實際上從不會從tempEmail的字符串中刪除「@」符號。爲什麼?

回答

5

字符串是不可變的。所有的String方法都不會改變String,但是它們會創建一個新的並返回它。試試這個:

tempEmail = tempEmail.Remove(tempEmail.IndexOf("@"), 1) 
+0

哦gotcha。這在Java中有什麼不同?我記得能夠在那裏做類似的事情。 – Scott 2010-07-29 13:37:37

+0

不正常,我不認爲。例如,'trim()'方法返回一個新的String,它不會改變它被調用的那個... – Stephen 2010-07-29 13:41:07

2
tempEmail.Remove(tempEmail.IndexOf("@"), 1) 

這行創建了一個新的字符串沒有 「@」。您需要將tempEmail設置爲等於命令:

tempEmail = tempEmail.Remove(tempEmail.IndexOf("@"), 1) 
2

Remove()返回一個新的字符串。它不會修改原文。

tempEmail = tempEmail.Remove(tempEmail.IndexOf("@"), 1) 
1

字符串是不可變的。他們不會改變。爲了得到你想要的效果,更改讀取的行:

tempEmail.Remove(tempEmail.IndexOf("@"), 1) 

...到:

tempEmail = tempEmail.Remove(tempEmail.IndexOf("@"), 1) 
2

正如其他人所指出的,字符串是在.NET中不可改變的。 Remove方法返回一個新的字符串,而不是更改原始對象。因此,你需要使用:

tempEmail = tempEmail.Remove(tempEmail.IndexOf("@"), 1) 

一個快速的方法,以確定該字符串是否包含多個「@」符號是通過LINQ,而不是使用IndexOf多次:

Dim input = "[email protected]" 
Dim count = input.Count(Function(c) c = "@"c) 
Console.WriteLine(count) 

然後,只需檢查If count = 1剛就像你在原來的If/Else塊中一樣。