Java contains没有实际搜索我的arraylist
编辑:重新编写整个问题Java contains没有实际搜索我的arraylist,java,arraylist,Java,Arraylist,编辑:重新编写整个问题 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.prin
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)插入系统时,我得到以下信息:
很明显,它就在那里。为什么没有显示?您不能在那里使用
contains
,因为它会搜索精确的区分大小写的匹配项。相反,如果某个元素符合您的条件(子字符串,不区分大小写),请手动遍历条目并返回索引。您所说的“searchModifier”是什么意思?它必须与ArrayList中的字符串相同,并且包含是区分大小写的搜索
如果您试图只搜索字符串的一部分,则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...
}
}
for(int i=0;i
ArrayList.contains(Object)确实会搜索整个ArrayList,以查看它是否包含与提供的参数相等的值()。在您的例子中,它正在查看addressBook中是否有一个值,比如value.equals(searchModifier)
不过,你的名字令人困惑。addressBook是一个ArrayList
,其中T的类型与searchModifier相同(或其超类型)?谁会想到地址簿会包含搜索修饰符
既然你已经修改了你的问题,很明显你不明白。您有一些类,我们称之为X,带有字符串字段(First、Last等)。您的addressBook变量的类型为ArrayList
(或者类似的类型,比如ArrayList
)。您的问题是searchModifier不是X,而是字符串。您试图在addressBook中找到一个以searchModifier作为字段值的X。这与在地址簿中查找searchModifier不同
您不能使用contains()方法获得所需的结果。您的列表包含地址对象,而不是字符串
显然,在地址列表中找不到字符串。这是不可能的。发布您的通讯簿对象和searchModifier。“可能是”与“等于”和哈希代码有关。要反驳您的假设,您可以在开始时放入addressBook.add(searchModifier)我们不知道所涉及的类型是什么,没有证据表明存在该值。一个简短但完整的程序演示这个问题会让你更容易得到帮助。那么你的searchModifier就不在列表中了,很简单哦,我的上帝,这个列表充满了对象,没有一个是字符串@ErickG.Hagstrom确实是,正如我所预料的那样。@Dancalahan:你可以试试如果(item.toLowerCase().trim().indexOf(searchModifier.toLowerCase().trim())!=-1).
@Dancalahan看到我对原文的编辑,你可以做类似的事情。@AlvinThompson“如果你不知道会发生什么,就不要以为你知道。”我不是落选者,但老实说,这句话也符合你和哈格瓦尔斯的答案。你们回答了一个非常不清楚的问题,只是一些假设。很高兴你尝试帮助OP,但这个问题应该标记为“不清楚你在问什么”,并关闭,直到OP提供了足够的关于他的问题的信息,直到问题得到正确回答为止。@Tom:通常提问者在得到提示之前,对正在发生的事情了解不够,无法提供相关的细节。如果没有混乱,海报就不会问这个问题。你是说我们不应该试图帮助这些人,因为他们没有足够的理解力在第一次尝试时提供所需的细节吗?如果是这样的话,我最初的答案是正确的。你在哪里看到提到一个地址
对象?@AlvinThompson这只是直觉:)简洁,完全回答了这个问题。OP问的是为什么,而不是我如何修复它。