我已经看到了其他线索,但我仍然不明白最好的方法。问题是开始的:无法将作为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()]);
答案 0 :(得分:2)
我不完全理解您的问题,但您可以使用contains()
测试列表中是否存在给定的字符串其他一些指示
答案 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
}