Java .contains实际上并没有搜索我的arraylist

时间:2015-06-14 20:17:38

标签: 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.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)插入系统时声明,我得到以下内容:

arrayList output

显然,它在那里。为什么不出现?

4 个答案:

答案 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)

您的列表包含地址对象,而不是字符串。

显然,你无法在地址列表中找到字符串。