我有一个字符串。现在如何检查字符串是否存在于我的数组列表中?
假设:
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)显示错误。
答案 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)
我会将Arrays
的binarySearch(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
}