从String中删除“@”

时间:2010-07-29 13:33:47

标签: vb.net

发一封电子邮件,想要从中删除第一个“@”符号,然后确保它在第二次检查中没有多于一个。目前我正在这样做。

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 个答案:

答案 0 :(得分:5)

字符串是不可变的。所有String方法都不会改变String,而是创建一个新的String并返回它。试试这个:

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

答案 1 :(得分:2)

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

此行创建一个 new 字符串,不带“@”。您需要将tempEmail设置为等于命令:

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

答案 2 :(得分:2)

Remove()返回一个新字符串。它不会修改原文。

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

答案 3 :(得分:2)

正如其他人所说,字符串在.NET中是不可变的。 Remove方法返回一个新字符串,而不是更改原始对象。因此,您需要使用:

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

确定字符串是否包含多个“@”符号的一种快捷方法是通过LINQ,而不是多次使用IndexOf

Dim input = "foo@bar.com"
Dim count = input.Count(Function(c) c = "@"c)
Console.WriteLine(count)

然后就像在原始的If / Else块中一样检查If count = 1

答案 4 :(得分:1)

字符串是不可变的。他们不会改变。要获得所需效果,请更改以下行:

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

...为:

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