当我从打开的套接字中获取IP地址时,因为有人向我发送了流,我注意到IP有一个正斜杠。
我只是打算简单地省略它。 但首先我想验证字符串中的第一个字符是正斜杠:
String dataSource = data.getAddress().toString();
if(dataSource.substring(0,1) == "/"){
System.out.println("trailing forward slash, delete it ");
dataSource = dataSource.substring(1);
}
未检测到此 IF 语句。
有人看到我做错了什么吗?
对于字符串比较,请使用equals
方法,因为它比使用运算符更可靠==
(它在比较内容的同时==
比较引用):
尝试使用以下方法equals
:
if(dataSource.substring(0,1).equals("/")){
请使用 .equals
if("/".equals(dataSource.substring(0,1))){
System.out.println("trailing forward slash, delete it ");
dataSource = dataSource.substring(1);
}
而不是 ==
如果只想测试第一个字符,可以尝试该方法,
dataSource.charAt(0)=='/'
你应该使用.equals
进行字符串比较 所以
if(dataSource.substring(0,1) == "/")
应该是
if ("/".equals(dataSource.substring(0,1)))
您正在将字符串与 ==
进行比较,这意味着您正在检查这两个字符串是否实际上是相同的字符串引用。
使用 equal()
检查并查看两个字符串是否包含相同的字符。
请参阅: http://www.leepoint.net/notes-java/data/expressions/22compareobjects.html
使用 .equals(Object)
或 .equalsIgnoreCase(String)
来比较字符串。
你需要做dataSource.substring(0,1).equals("/")
,这实际上检查了字符串的内容。 ==
只检查两边是否是同一对象。
试试这个
if (("some string to check").equals(myString)){ 做某事();}
比较值时始终使用 equals
。话虽如此,您可以根据indexOf
目的使用该方法
if (dataSource.indexOf('/') == 0) {
dataSource = dataSource.substring(1);
}
String dataSource = "/hell";
if(dataSource.substring(0,1).equalsIgnoreCase("/")){
System.out.println("trailing forward slash, delete it ");
dataSource = dataSource.substring(1);
}
运行此程序。这正在工作。.
为什么要使用字符串?你只是在为自己制造这个问题。使用提供的数据类型:
InetAddress dataSource = data.getInetAddress();
或
SocketAddress dataSource = data.getRemoteSocketAddress();
然后,在这两种情况下,您都有一个语义感知的.equals()
方法。