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问的是为什么,而不是我如何修复它。