比较字符串 bwlow API 18

Compare strings bwlow API 18

查了下才知道==不是用来比较字符串变量内容的,而是equals().

但是,AS 报告说 equals() 仅适用于 API 19 (Android 4.4) 及更高版本,我的目标是 API 18(我唯一的 phone 是 Android 4.3)

所以现在,我正在做 if (var1.contains(var2))if (array[i].contains(var)) 来比较字符串,它可以工作,但对我来说似乎不正确。

在 API < 19 岁时实现此目标的正确方法是什么?

谢谢。

编辑:澄清一下(我不知道如何放置内嵌图片)

With ==

With equals()

比较失败 equals()

Object class 的 equals 函数是在 Java JDK 1.0 中添加的。

此版本于 1996 年 1 月 23 日发布。当时称为 'Oak',因此从技术上讲它甚至早于 Java 本身。 (source).

相比之下,Android API 1是在2008年9月23日released,此时将与Java JDK 1.5 (最新版本是 Java SE 5 Update 16)。

所以综上所述,equals 在API 18级可用,一定有其他错误。


看到发布的代码后,您正在使用 Objects.equals(),这是一种以空安全方式检查 equals() 的实用方法。
在许多情况下,就像您的情况一样,您不需要额外的 null 检查,因为您知道至少有一个对象不为 null,您可以直接调用 equals:

if("una".equals(hourNames[realHour]))

您的 hourNames 数组可能不包含空元素,因此您应该将其调整为更易读的顺序:

if(hourNames[realHour].equals("una"))

使用hourNames[realHour].equals("una")

是的,这是 android studio 上的一个错误(或者可能来自 intellij idea)。

既然 if (var1.contains(var2)) 适合你,你为什么不 post 确切的字符串呢?如果您没有调试功能,我建议您使用这些来调试字符串中的差异点:-

boolean    contentEquals(CharSequence cs)
public int compareTo(String anotherString)

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#compareTo(java.lang.String)

您也可以使用模拟器 env 和 运行 这个小测试:-

String s1 = "Test";
String s2 = "Test";
if (s1.equals(s2))
    System.out.println("Equal");
else
    System.out.println("Not Equal");