Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-If语句不工作(比较字符串)_Java_String_If Statement_Compare - Fatal编程技术网

Java-If语句不工作(比较字符串)

Java-If语句不工作(比较字符串),java,string,if-statement,compare,Java,String,If Statement,Compare,当我从打开的套接字获取IP地址时,由于有人向我发送了一个流,我注意到IP有一个正斜杠 我只是打算略去它。但首先我要验证字符串中的第一个字符是正斜杠: String dataSource = data.getAddress().toString(); if(dataSource.substring(0,1) == "/"){ System.out.println("trailing forward slash, delete it "); dataSource = dataS

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


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

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

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


请参阅:

您应该使用
.equals
进行字符串比较 所以

应该是

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

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

尝试使用
equals
方法:

if(dataSource.substring(0,1).equals("/")){
使用
.equals(Object)
.equalsIgnoreCase(String)
比较字符串。

请使用.equals

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

你需要做的不是==

而是
dataSource.substring(0,1).equals(“/”)
,它实际上检查字符串的内容<代码>=仅检查两侧是否为同一对象。

尝试此操作

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

如果您只想测试第一个字符,您可以尝试该方法


dataSource.charAt(0)='/'

在比较值时始终使用
equals
。已经说过,您可以根据自己的目的使用
indexOf
方法

   if (dataSource.indexOf('/') == 0) {
        dataSource = dataSource.substring(1);
    }

运行这个程序。这起作用了。

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

InetAddress dataSource = data.getInetAddress();


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

使用
.equals
来比较内容<代码>=始终按引用进行比较。@nHahdh这是真的。然而,他显然是一个初学者(没有冒犯),没有理由为此而贬低他。我用一个向上的投票来反驳。合法的问题,是的,但不是一个愚蠢的问题,而且措辞正确。@Sean F是的,他正在努力。我以前也遇到过类似的事情,看看比较引用和原始数据类型(Srinivas B有一个很好的观点)。在您了解了这一点之后,请看一下字符串对象池和实习,只是让您自己有点困惑!;)
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();