.net 比较相同的字符串返回false
我想编写一个函数来检查我的ip。如果我的ip是.net 比较相同的字符串返回false,.net,vb.net,io,.net,Vb.net,Io,我想编写一个函数来检查我的ip。如果我的ip是22.161.121.238或正在检查发出的异常它将休眠当前线程并再次开始检查 这就是代码: Private Sub CheckIp() Dim ip As String Dim mine As String = "22.161.121.238" Try Do Using wc As New Net.WebClient ip = System.Te
22.161.121.238
或正在检查发出的异常
它将休眠当前线程并再次开始检查
这就是代码:
Private Sub CheckIp()
Dim ip As String
Dim mine As String = "22.161.121.238"
Try
Do
Using wc As New Net.WebClient
ip = System.Text.Encoding.UTF8.GetString(wc.DownloadData("http://tools.feron.it/php/ip.php"))
End Using
If String.Equals(ip, mine) Then
MessageBox.Show("2")
Threading.Thread.Sleep(10000)
Else
MessageBox.Show("@" & ip & "@ is not equal to @" & mine & "@")
End If
End If
Loop While ip = "22.161.121.238"
Catch ex As Exception
Threading.Thread.Sleep(10000)
CheckIp()
End Try
End Sub
我不知道为什么它不显示来自MessageBox
的“2”。即使ip
和mine
相同,它也不会启动Show
方法。你能告诉我为什么吗
编辑
启动按钮后得到的结果是(我添加了@
以查看字符串的起始位置):
试试这个函数,原来的函数中有一些if/then逻辑不正确
Private Sub CheckIp()
Dim ip As String
Dim mine As String = "22.161.121.238"
Try
Do
Using wc As New Net.WebClient
ip = System.Text.Encoding.UTF8.GetString(wc.DownloadData("http://tools.feron.it/php/ip.php"))
End Using
If string.Compare(ip, mine) = 0 Then
MessageBox.Show("2")
Threading.Thread.Sleep(10000)
Else
MessageBox.Show("@" & ip & "@ is not equal to @" & mine & "@")
End If
Loop While ip.Contains("22.161.121.238")
Catch ex As Exception
Threading.Thread.Sleep(10000)
CheckIp()
End Try
End Sub
简单的答案是,您的两个字符串不相同。它们可能看起来相同,但您从web资源返回的字符串在字符串开头包含了不可见的(我选中了) 要确认,请检查返回字符串的各个字符的数值,特别是第一个字符 作为一种变通方法,您可以使用@henry的答案,该答案使用了一种不同的比较字符串的方法,它将忽略
u+feff
字符
或者,您可以显式地将其去掉以进行相等性检查:
If String.Equals(ip.Replace(ChrW(&HFEFF), String.Empty), mine) Then
但是,如果您是PHP页面的作者,您可能希望修复它,以便它不会首先返回
u+feff
字符。您如何确定ip
和mine
是相同的?我猜它们实际上不是。你应该考虑使用CLAS,它不会神奇地解决问题,但它可以减轻它们。(这是一种更可靠的方法Stan,wny你不要像我一样启动visual studio,复制代码并测试值,你的假设是完全错误的。我应该早一点这样做,但我在第一篇文章中添加了gif。String.Equals
检查二进制相等性(这似乎是OP想要的),其中asString.Compare
检查排序顺序,并将受到当前区域性的影响。String.Equals不比较引用(与大多数Equals一样),因为String是一个类,但具有“值类型行为”因此Equals与==运算符相同。为什么对我的答案进行向下投票,这是100%正确的。Sstan,我在代码中测试了我的答案。您的评论对于OP想要的内容是完全错误的。String。比较
可以返回逻辑排序相同但不一定相等的两个字符串的0
。这是正确的吗?好的,我们同意这一点这两个字符串是不相同的。我的问题是OP认为这两个字符串是相同的,String.Equals
在某种程度上被破坏了。你的回答进一步助长了这个错误的概念,仅仅是说他使用了错误的函数,并且暗指Equals
没有按照他的想法做。你不这么认为吗nk解释为什么他的代码不起作用(字符串不相同)会更有用,这是OP的问题。然后,如果你想建议一个实际的解决方法,那么无论如何……这些类型的问题和答案现在很流行:-)在过去的几个月里,您已经回答了其中的一些问题+1 b因此,您必须使用string.compare函数:)OP不在乎它们在真正相等的定义中是否相等。@henry:这是您的解释。当我看到一个标题说:比较相同的字符串返回false,然后问题是你能告诉我为什么吗?我认为正确的答案是因为字符串实际上并不相同。如果OP需要解决办法,好的。但我绝不想给任何人一个错误的印象,即String.Compare(s1,s2)==0
是检查相同字符串的有效方法。