发一封电子邮件,想要从中删除第一个“@”符号,然后确保它在第二次检查中没有多于一个。目前我正在这样做。
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中删除字符串中的“@”符号。为什么呢?
答案 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)