string.equals(string2)返回false,尽管两个字符串完全相同,即使长度也是如此

时间:2016-05-11 11:19:09

标签: java android

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

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

我甚至检查两个琴弦的长度,它们完全相同。我Toast string1.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);

   }

6 个答案:

答案 0 :(得分:2)

如果您使用StringBuffer,则equals将无法比较两个String。 这样做:

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

答案 1 :(得分:0)

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

如果两者相等,则应该如此。

答案 2 :(得分:0)

检查您的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 :(得分:0)

使用TextUtils类:

您可以尝试使用TextUtils.equals(CharSeq1,Charseq2),以防您在比较中遗漏某些情况。
TextUtils中的方法负责处理null情况。
如果返回方法仍然相同,那么你可以尝试使用char(也许这比使用标准equals更合适):<​​/ p>

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

说明

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

(希望对您有所帮助。)

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