Java:将ArrayList项与User Input String进行比较

时间:2014-08-01 20:06:07

标签: java string arraylist

我已经看到了其他线索,但我仍然不明白最好的方法。问题是开始的:无法将作为String的用户输入与arrayList项(对象)进行比较。我的名单将超过40项。

因此,当我尝试将classesList.get(0)与用户输入mage进行比较时。它不会起作用。

List<String> classesList = new ArrayList<String>();
classesList.add("mage");
classesList.add("warrior");
classesList.add("thief"); 

Scanner input = new Scanner(System.in);

String input = input.next();

for (int counter = 0; counter < classesList.size(); counter++) { 
    if (input == classesList.get(counter)) {
        //won't run body since can't compare
    }
}

我找到了一些将arrayList转换为String的人。但我不确定如何能够轻松搜索我的列表。我宁愿把它留作List而不是。这种方法是最好的方法吗?

String[] classesArray = classesList.toArray(new String[classesList.size()]);

4 个答案:

答案 0 :(得分:2)

我不完全理解您的问题,但您可以使用contains()

测试列表中是否存在给定的字符串

其他一些指示

  • 永远不要将字符串与==进行比较,请使用.equals()。请参阅this question
  • 使用(String element:list)语法
  • 可以更简单地完成迭代

答案 1 :(得分:2)

我认为您必须查看ArrayList中是否存在输入字符串,您必须使用contains()方法。

   if(classesList.contains(input)) {
       //Found in the arraylist.
   }

但是使用方法,您无法使用==运算符比较字符串。您应该使用equals()方法进行比较

List<String> classesList = new ArrayList<String>();
classesList.add("mage");
classesList.add("warrior");
classesList.add("thief"); 

Scanner input = new Scanner(System.in);

String input = input.next();
boolean isExist = false;
for (String item : classesList) { 
    if (input.equals(classesList.get(counter))) {
        //Your logic if it's there.
         isExist = true;
         break;
   }
}

 if(isExist) {
     //Found in the arraylist.
 }

此外,如果您想通过隐藏案例进行此比较,您应该考虑使用equlasIgnoreCase()方法而不是equals()方法。

答案 2 :(得分:2)

是的,你读的是对的,不要使用以下内容:

for (int counter = 0; counter < classesList.size(); counter++) { 
    if (input == classesList.get(counter)) {
        //won't run body since can't compare
    }
}

如果您使用循环,则不能使用==进行比较,而应使用equals方法:

for (int counter = 0; counter < classesList.size(); counter++) { 
    if (input.equals(classesList.get(counter))) {
        //won't run body since can't compare
    }
}

否则更简单的方法是使用其他答案中提到的contains

另见How do I compare strings in Java?

干杯!!

答案 3 :(得分:2)

您可以在列表中使用contains方法查看其中是否包含特定字符串,而不是迭代它。但是,基础列表仍将在内部迭代列表的内容。

为了提高速度,你可以做的是改为使用Set,它具有让contains在恒定时间内运行的良好属性。

Set<String> classesSet = new HashSet<>();
// none of your other code has to change, except for:

if(classesSet.contains(input)) {
    // logic
}