如何将用户的输入值与数组中的值进行比较

时间:2017-06-22 18:36:20

标签: java android arrays switch-statement

我想使用现有的数组元素作为switch case而不是给切换大小写的常量字符串值

我在资源字符串数组中有我曾经显示的值,并且用户必须从这些显示值中进行选择,现在我想比较我在共享首选项中保存的输入值和我在数组资源中的值,我写了这样的东西,但它不起作用

private static String activity;
private static int result;
activity = SharedPrefUtils.getActivityLevel(context);

String[] activities 
= context.getResources().getStringArray(R.array.activity);

switch (activity){
      //something like getting values from array
        case activities[0]:
            result = 0;
            break;
        case activities[1]:
            result = 200;
            break;
        case activities[2]:
            result = 300;
            break;
    }

    return result;

2 个答案:

答案 0 :(得分:0)

您可以将其转换为array并使用List来获取元素索引,而不是遍历indexOf,例如:

String[] activities = context.getResources().getStringArray(R.array.activity);
List<String> activitiesList = Arrays.asList(activities);
int index = activitiesList.indexOf(activity);

这是javadoc所说的:

  

返回指定元素第一次出现的索引   此列表,如果此列表不包含该元素,则返回-1。更多   正式地,返回最低的索引i,使得(o == null?get(i)== null   :o.equals(get(i))),如果没有这样的索引,则为-1。

因此,您可以将您的逻辑基于index值。

另一种方法是使用Map<Integer, String>并根据用户选择的任何值将Integer密钥传递给方法。

答案 1 :(得分:0)

首先确保你的“activity”字符串和“activities”数组的项目返回一些值。尝试打印值以检查它。如果所有这些都返回了你的值,那么你可以用这种方式比较String:

if (activity.equalsIgnoreCase(activities[0]){
   Log.e("Matched" , "Yeah, it matched");
}

您可以通过这种方式逐个匹配所有字符串值。