编辑:重写整个问题。
public static int search(ArrayList addressBook)//handles all search functionality
{
Scanner input = new Scanner(System.in);
String searchModifier;//declaring variables
int noEntry = -1;
System.out.print("\n\nPlease enter value to search for: ");//empowering the user
searchModifier = input.next();//gathering searchModifier
System.out.print (addressBook);
if(addressBook.contains(searchModifier))//if their searchModifier is found
return addressBook.indexOf(searchModifier);//return that index value
else
return noEntry;
}
以上是我遇到问题的功能。我从另一个文件中调用它。当我在" if"之前将System.out.print(addressBook)插入系统时声明,我得到以下内容:
显然,它在那里。为什么不出现?
答案 0 :(得分:3)
您无法使用contains
,因为它会搜索精确的区分大小写的匹配项。相反,如果元素符合您的条件(子字符串,不区分大小写),则手动迭代条目并返回索引。
答案 1 :(得分:2)
“searchModifier”是什么意思?它必须是相同的String,它应该存在于ArrayList中,而contains
是区分大小写的搜索。
如果您只是尝试搜索字符串的一部分,则ArrayList.contains()
不适合它。
修改强> 你可以做类似下面的事情,但你必须循环,这是唯一的问题。
for (int i = 0; i < arrayList.size(); i++) {
if(arrayList.get(i) != null && arrayList.get(i).toLowerCase().contains("your_match_String".toLowerCase())){
//Match found...
}
}
答案 2 :(得分:1)
ArrayList.contains(Object)确实搜索整个ArrayList以查看它是否包含等于()提供的参数的值。在您的情况下,它正在查看addressBook中是否有值,以便value.equals(searchModifier)。
但是你的名字令人困惑。 addressBook是ArrayList<T>
,其中T与searchModifier(或其超类型)的类型相同?谁会期望地址簿中包含搜索修饰符?
既然你已经修改了你的问题,很明显你不理解。你有一些类,我们称之为X,带有字符串字段(First,Last等)。您的addressBook变量的类型为ArrayList<X>
(或类似的东西,如ArrayList<Object>
)。你的问题是searchModifier不是X,它是一个String。您正在尝试在addressBook中找到一个将searchModifier作为字段值的X.这与在addressBook中查找searchModifier不同。
您无法使用contains()方法获得所需的结果。
答案 3 :(得分:1)
您的列表包含地址对象,而不是字符串。
显然,你无法在地址列表中找到字符串。