繁体   English   中英

string.equals(string2) 返回 false 虽然两个字符串完全相同,即使在长度上

[英]string.equals(string2) returns false though both strings are exactly same, even in length

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

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

我什至检查了两个字符串的长度,它们完全相同。 Toast string1.equals(string2)并得到 false 虽然它们是相同的。

    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);

   }

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

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

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

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

检查您的 lastUpdated 和 prevTime。

这是 equals() 的简单示例。 试试这个应该有效。

  String Str1 = "Hello";
  String Str2 = "Hello";
  boolean retVal;

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

输出

Returned Value = true

使用 TextUtils 类:

您可以尝试使用 TextUtils.equals(CharSeq1, Charseq2) 以防您在比较中遗漏了某些情况。
TextUtils 的方法处理空情况。
如果返回方法仍然相同,那么您可以尝试使用 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

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

说明

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM