4

当我从打开的套接字中获取 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 语句。

有人看到我做错了什么吗?

4

11 回答 11

2

对于字符串比较使用equals方法,因为它比使用==运算符更可靠(它比较内容,同时比较==引用):

尝试使用equals方法:

if(dataSource.substring(0,1).equals("/")){
于 2012-12-19T04:15:21.963 回答
2

请使用 .equals

if("/".equals(dataSource.substring(0,1))){
    System.out.println("trailing forward slash, delete it ");  
    dataSource = dataSource.substring(1);
}

而不是==

于 2012-12-19T04:16:13.517 回答
2

如果你只想测试,第一个字符,你可以试试这个方法,

dataSource.charAt(0)=='/'

于 2012-12-19T04:17:35.270 回答
1

你应该使用.equals字符串比较所以

if(dataSource.substring(0,1) == "/")

应该

if ("/".equals(dataSource.substring(0,1)))
于 2012-12-19T04:15:21.683 回答
0

您将字符串与 进行比较==,这意味着您正在检查这两个字符串是否实际上是相同的字符串引用。

用于equal()检查两个字符串是否包含相同的字符。

见: http: //www.leepoint.net/notes-java/data/expressions/22compareobjects.html

于 2012-12-19T04:15:09.607 回答
0

使用.equals(Object)or.equalsIgnoreCase(String)比较字符串。

于 2012-12-19T04:15:26.713 回答
0

你需要做dataSource.substring(0,1).equals("/"),它实际上检查字符串的内容。==只检查双方是否是同一个对象。

于 2012-12-19T04:16:34.847 回答
0

试试这个

if (("要检查的字符串").equals(myString)){ doSomething(); }

于 2012-12-19T04:17:07.297 回答
0

equals比较值时始终使用。话虽如此,您可以将indexOf方法用于您的目的

   if (dataSource.indexOf('/') == 0) {
        dataSource = dataSource.substring(1);
    }
于 2012-12-19T04:28:55.537 回答
0
String dataSource = "/hell";

        if(dataSource.substring(0,1).equalsIgnoreCase("/")){
            System.out.println("trailing forward slash, delete it ");  
            dataSource = dataSource.substring(1);
        }

运行这个程序。这是工作..

于 2012-12-19T04:52:06.093 回答
0

为什么使用字符串?你只是在为自己制造这个问题。使用提供的数据类型:

InetAddress dataSource = data.getInetAddress();

或者

SocketAddress dataSource = data.getRemoteSocketAddress();

然后你在这两种情况下都有一个语义感知的.equals()方法。

于 2012-12-19T07:09:40.710 回答