【问题标题】:Java - If statement not working (comparing strings)Java - If 语句不起作用(比较字符串)
【发布时间】:2012-12-06 09:24:47
【问题描述】:

当我从打开的套接字中获取 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比较内容。 == 总是按引用比较。
  • @nhahtdh 是的。然而,他显然是一个初学者(没有进攻),没有理由因此贬低他。我反对。
  • 合法问题,是的,但不是一个愚蠢的问题,而且措辞正确。
  • @Sean F 是的,他正在努力。我以前也遇到过这样的事情。
  • 看看比较引用与原始数据类型(Srinivas B 有一个很好的观点)。在你明白了之后,看看字符串对象池和实习只是为了让自己有点困惑! ;)

标签: java string if-statement compare


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    应该是

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

    【讨论】:

      【解决方案3】:

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

      尝试使用equals 方法:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          请使用 .equals

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

          而不是 ==

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

              试试这个

              if (("要检查的字符串").equals(myString)){ 做一点事(); }

              【讨论】:

                【解决方案8】:

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

                dataSource.charAt(0)=='/'

                【讨论】:

                  【解决方案9】:

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

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

                  【讨论】:

                    【解决方案10】:
                    String dataSource = "/hell";
                    
                            if(dataSource.substring(0,1).equalsIgnoreCase("/")){
                                System.out.println("trailing forward slash, delete it ");  
                                dataSource = dataSource.substring(1);
                            }
                    

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

                    【讨论】:

                      【解决方案11】:

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

                      InetAddress dataSource = data.getInetAddress();
                      

                      SocketAddress dataSource = data.getRemoteSocketAddress();
                      

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

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 2016-07-17
                        • 1970-01-01
                        • 1970-01-01
                        • 2017-06-06
                        • 2012-12-06
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多