【问题标题】:string.equals(string2) returns false though both strings are exactly same, even in lengthstring.equals(string2) 返回 false 尽管两个字符串完全相同,即使长度相同
【发布时间】:2016-05-11 11:19:09
【问题描述】:

当两个字符串不同时,我正在尝试执行操作。这些字符串实际上是时间,正在检查我从远程数据库获得的新时间是否不同。

我反复从数据库中获取时间,并有一个包含上一次时间的变量来检查新时间是否与旧时间相同。如果不是我做手术。我看到时间完全一样,但代码仍然执行。

我什至检查了两个字符串的长度,它们完全相同。我Toaststring1.equals(string2) 得到了错误,尽管它们是相同的。

    if( (!lastUpdated.equals(prevTime))) {
   swipe(Integer.parseInt(x1.toString()), Integer.parseInt(y1.toString()), Integer.parseInt(x2.toString()), Integer.parseInt(y2.toString()));
    CodeType.setLength(0);
    Toast.makeText(getApplication(), " lastUp " + lastUpdated + ", prevtime " + prevTime, Toast.LENGTH_SHORT).show();
    Toast.makeText(getApplication(), ""+lastUpdated.equals(prevTime), Toast.LENGTH_SHORT).show();
    updatePrevTime(lastUpdated);

   }

【问题讨论】:

  • 请拒绝投票的原因..距离我发布问题仅一秒钟
  • (!lastUpdated.equals(prevTime)) 您只检查错误条件。
  • 调试并检查字符串中的实际值。
  • lastUpdatedprevTime 的值是什么?
  • 好吧,如果它在你更新它后工作正常,那显然是问题所在。不过我们帮不了你,因为你没有包含足够的代码让我们知道这些变量是什么类型...

标签: java android


【解决方案1】:

如果您使用StringBufferequals 将不会比较两个Strings。 这样做:

yourStrBuffer.toString().equals(prevTime.toString())

【讨论】:

    【解决方案2】:

    检查您的 lastUpdated 和 prevTime。

    这是 equals() 的简单示例。试试这个应该可以。

      String Str1 = "Hello";
      String Str2 = "Hello";
      boolean retVal;
    
      retVal = Str1.equals( Str2 );
      System.out.println("Returned Value = " + retVal );
    

    输出

    Returned Value = true
    

    【讨论】:

      【解决方案3】:

      字符串中有尾随或前导空格。 试试这个:lastUpdated.trim().equals(prevTime.trim())

      如果两者相等,这应该是正确的。

      【讨论】:

      • 如果我使用trim,我认为我应该先为两者先做lastUpdated = lastUpdated.trim(),然后再做.equals
      【解决方案4】:

      如何将时间格式化为字符串?您的值是否包含时区或句点 (am/AM) 之类的字母?您可以对两个值使用相同的格式化程序还是使用equalsIgnoreCase()

      【讨论】:

        【解决方案5】:

        使用 TextUtils 类:

        您可以尝试使用 TextUtils.equals(CharSeq1, Charseq2) 以防您在比较中遗漏了某些情况。
        TextUtils 中的方法负责处理 null 情况。
        如果返回方法还是一样,那么你可以尝试使用 by char(也许这比使用标准 equals 更合适):

        for (int i = 0; i < length; i++) {
             if (a.charAt(i) != b.charAt(i)) {
                 return false;
             }
        }
        

        您可以在此处找到有关课程的详细信息:
        https://android.googlesource.com/platform/frameworks/base/+/b2c4f0bf11f38fd31d80f1256c89b9db043a2929/core/java/android/text/TextUtils.java

        【讨论】:

        • 这与以String为参数在String上调用equals完全相同
        • 其实不太一样,看方法。正如我已经说过的,他可以传递字符串,也可以尝试使用 Charsequence。
        • 没错,但正如我从问题中所理解的那样,他正在使用字符串,在这种情况下,您的解决方案与他已经做的完全一样。请参阅链接的第 480 和 481 行
        【解决方案6】:

        解释

        如果字符串不严格属于 String 类,则 .equals() 方法可能存在问题。最近我也遇到了同样的问题,一个是String类,另一个是EditText.getText()。如果你不仔细注意,这可能是问题,因为 getText() 方法实际上返回的 CharSequence 与 String 不同,它可以通过自动转换在程序的其他地方工作,但不能在 .equal() 中工作。但是使用 getText().toString() 给出了正确的结果,因为现在我正在比较严格 String 类的两个对象。

        (希望对某人有所帮助。)

        当它来自 Stream 类时会发生同样的问题,因为它在内部处理字符,也可能是由于编码。所以请检查一下。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-02-22
          • 2011-12-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-17
          • 2019-07-29
          • 2016-12-18
          相关资源
          最近更新 更多