【问题标题】:compare two strings with .equals() don't work用 .equals() 比较两个字符串不起作用
【发布时间】:2014-09-11 15:31:02
【问题描述】:

我从列表中得到一个字符串,并尝试将它与值中的一些字符串进行比较,然后做一些事情

for(int i=0; i<sizeOfList; i++){

    String LIST_TITLE;

    LIST_TITLE = list_title.get(i); //the List list_title includes some strings

    if(LIST_TITLE.equals(R.string.percentbattery)) {
        //do stuff
        Log.d("EQUAL!","" + LIST_TITLE);
    } else if(LIST_TITLE.equals(R.string.screenrecorder) == true) {
        //do stuff
        Log.d("EQUAL!","" + LIST_TITLE);
    } else if(LIST_TITLE.equals(R.string.eightsms) == true) {
        //do stuff
        Log.d("EQUAL!","" + LIST_TITLE);
    } else {
        // do stuff
        Log.e("TITLE NOT EQUAL","" + LIST_TITLE);
    }
}

如果我将我的 LIST_TITLE 与 Logcat 中的 (R.string. ...) 进行比较,它们是相等的,但我从 else 语句中只得到“TITLE NOT EQUAL”日志。

还有其他方法可以比较这些字符串吗? "==" 方法也不起作用。

【问题讨论】:

  • if (condition == true) 被认为是糟糕的风格。使用= 而不是== 很容易出错,这意味着您将true 分配给condition(如果它是变量)。这就是为什么最好只使用if (condition),或者如果你真的必须将它与true进行比较,那么使用yoda风格if (true == condition) - 即使你使用=而不是==,你也会得到编译错误,因为我们可以给变量赋值,而不是给其他值。

标签: java android string compare equals


【解决方案1】:

R.string.percentbattery 不是字符串,它是一个整数,即引用字符串的 ID。

你想要的是:

LIST_TITLE.equals(context.getResources.getString(R.string.percentbattery))

【讨论】:

  • 即使我使用您的解决方案或LIST_TITLE.equals("String") 它也不起作用。更多细节:我在AsyncTask (doInBackground) 中使用它。我从网站获取标题并将它们保存在List list_title 中。现在我尝试将此 list_title 与一些字符串进行比较以设置图标。在这个 AsyncTask 中我没有上下文,所以我在没有上下文的情况下使用了你的解决方案。 LIST_TITLE.equals(getResources().getString(R.string.percentbattery))这可能是错误吗?谢谢
  • 您如何称呼它并没有什么不同。如果在Activity 内,您可以直接调用getString(int)。这确实是这段代码的所在。修复代码的重要一点是要了解 R.string.anything 不是字符串,因此您无法将其与字符串进行比较,您需要获取实际的字符串才能进行比较。
【解决方案2】:
LIST_TITLE.equals(R.string.percentbattery)

这是不正确的,因为您正在尝试将字符串与资源 ID 进行比较 您应该首先从资源中获取字符串:

LIST_TITLE.equals(getResources().getString(R.string.percentbattery))

【讨论】:

  • 哇!打字时还有四个答案...我打字太慢了:)
【解决方案3】:

R.string.xxx 是一个int。您需要从 res 获取 String

类似

if(LIST_TITLE.equals(getResources().getString(R.string.percentbattery)))

这是假设您有Activity Context 可用。否则,您需要在getResources() 前面添加一个Context 变量

【讨论】:

    【解决方案4】:

    R.string.some_id 只是一个整数,您可以通过它从资源中获取字符串。 因此,为了在您的情况下正确比较 Strings,您必须这样做:

    String precentBattery = getResources().getString(R.string.percentbattery);
    if (LIST_TITLE.equals (percentBattery)) ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 2014-04-03
      • 2012-01-22
      相关资源
      最近更新 更多