检查ArrayList中是否存在字符串?

时间:2013-12-29 13:07:38

标签: java arraylist

我有一个字符串。现在如何检查字符串是否存在于我的数组列表中?

假设:

str="nokia"
mobiles[0]="samsung"
mobiles[1]="nokia"
mobiles[2]="blackberry"

我试过了

Boolean match=false;    
for(int j = 0 ; j <= 15 ; j++) {
   match =mobiles[j].compare(str);
   if(match == true) {
     break;
   }
}

但.compare(str)显示错误。

5 个答案:

答案 0 :(得分:2)

我猜测compare(str)正在抛出错误,因为String类没有名为compare()的函数。

您可以使用equals()equalsIgnoreCase()进行不区分大小写的匹配。还有compareTo()compareToIgnoreCase()更接近您键入的内容。请注意,compareTo方法返回一个int值。

您可以阅读方法说明here

以下是使用equalsIgnoreCase()的示例。

boolean match = false;    
for (int j = 0; j < mobiles.length; j++)
{
    match = mobiles[j].equalsIgnoreCase(str);
    if (match)
    {
         break;
    }
} 

我已经更改了循环上的终止条件以使用mobiles数组的长度。这样,如果更改数组的长度,则无需更改硬编码值。它也可能使循环的意图更清晰。

正如ZouZou所指出的那样,写match == true是没有必要的,因为匹配本身就是一个布尔值。这种情况似乎不需要使用包装器类,因此您可以将match声明为基本类型boolean

答案 1 :(得分:2)

在您提到ArrayList的问题中,您的示例显示了一个数组。 如果您真的有ArrayList,请使用类似:

的内容
if(mobiles.contains(str))
{
    //code here
}

如果您有一个数组,转换为ArrayList后可以使用相同的“包含”,使用类似的内容:

if(Arrays.asList(mobiles).contains(str))
{
    //code here
}

答案 2 :(得分:0)

我建议不要使用比较字符串的操作,而是直接执行:

boolean match = false;
for (j=0; j<=mobiles.length; j++) {
    if (mobiles[j].equals(str)) {
        match=true; break;
    }
}

如果以后不需要匹配布尔值,可以删除它。

答案 3 :(得分:0)

试一试:

 match =mobiles[j].equalsIgnoreCase(str);

equalsIgnoreCase将此String与另一个String进行比较,忽略了案例注意事项。如果两个字符串长度相同,则认为两个字符串是相等的,并且两个字符串中的相应字符相等,忽略大小写。

答案 4 :(得分:0)

我会将ArraysbinarySearch(Object[] a, Object key)方法与其sort(Object[] a)方法结合使用。

import java.util.Arrays; //put this at the top of your code

//your code here

String[] tempMobiles = mobiles; //temporary array that will be modified
Arrays.sort(tempMobiles); //sorts tempMobiles to prepare it for the next line
if(tempMobiles[Arrays.binarySearch(tempMobiles, str)].equals(str)) //if the string at the location returned by the binarySearch equals str...
{
    match = true; //sets match to true
}