【问题标题】:Why my strings not equal?为什么我的字符串不相等?
【发布时间】:2016-10-11 08:46:03
【问题描述】:

我有 2 个字符串,名称为 str1,由 url 中的数据填充,str2 由 SQLite 数据库中的数据填充。str1 是“x4”,str2 是“x4”,但是当我想比较它们时,它们不相等。

if(str1.equals(str2)) System.out.println(str1 + "=" + str2);
else System.out.println(str1 + "!=" + str2);

并且总是打印x4!=x4

我改变了值,但总是不等于。

【问题讨论】:

  • 尾随空格可能吗?
  • 尝试打印System.out.println(">"+str1 + "!=" + str2+"<"); 以更好地查看。
  • @Berger System.out.println(Arrays.toString(str1.toCharArray()) + "!=" + Arrays.toString(str2.toCharArray())); 会帮助你看得更清楚。
  • @ArneHB 不可能是编码,你建议的构造函数甚至都不存在。

标签: java string if-statement


【解决方案1】:

Database.str1 是“x4”,str2 是“x4”

它可能看起来像那样,但我敢打赌,情况并非如此。为什么不打印出每个字符串的 char 数组,这样您就可以识别出不同之处?我建议寻找前导/尾随空格、非打印字符、Unicode 相关差异等。

【讨论】:

    【解决方案2】:

    尝试将其更改为:

    StringBuilder string = new StringBuilder();
    string.append("'");
    string.append(str1);
    string.append("'");
    
    if(!str1.equals(str2)){
        string.append("!");
    }
    
    string.append("'");
    string.append(str2);
    string.append("'");
    System.out.println(string.toString());
    

    其中一个字符串中很可能有空格、回车或制表符。 通过在每个字符串的开头和结尾添加一个字符,您可以识别是否是这种情况。

    如果问题仍然存在,则可能意味着其中一个不同的字符不可打印。在这种情况下尝试:

    string.append(str1.toCharArray()); 
    

    而不是

    string.append(str1);
    

    str2 做同样的事情。

    【讨论】:

      【解决方案3】:

      这可能是由于尾随空格引起的,正如a_horse_with_no_name 所说,或者(也许你没有注意到)由于大小写不同。试试这个:

      if(str1.trim().equalsIgnoreCase(str2.trim()))
          System.out.print(str1 + "=" + str2);
      else
          System.out.print(str1 + "!=" + str2);
      

      考虑到大小写差异,使用trim() 删除尾随空格并使用equalsIgnoreCase() 而不是equals()

      【讨论】:

      • 我不确定这是 OP 的要求。他问他们为什么不平等,而不是他应该怎么做才能让他们通过声明。但如果我错了,那么你就是对的。
      • 如果差异不在字符串的末尾怎么办?例如AbA\0b 在我的控制台中看起来相同,但不会删除 \0
      • @AndyTurner 在这种情况下,字符串不会只是“不相等”吗?
      • 确实如此。但是 OP 在问为什么两个“看起来相等”的字符串不一样。
      猜你喜欢
      • 2018-07-25
      • 1970-01-01
      • 2021-12-13
      • 2019-05-20
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 2018-09-17
      相关资源
      最近更新 更多