Java如何检查数组中的元素是否存在?

27

我正在将一些数据下载到一个字符串数组中,假设叫做ImageLinks。如何检查数组中是否存在一个元素?

我正在尝试。

if(ImageLinks[5] != null){}

但是它给了我一个ArrayIndexOutOfBoundsException异常。(因为数组中确实没有第5个链接)


如果(ImageLinks.length > 5) - Peter Lawrey
6个回答

37
为了避免 ArrayIndexOutOfBoundsException 异常,你可以使用以下方法:
if(ImageLinks.length > 5 && ImageLinks[5] != null)
{
    // do something
}

由于在if语句中的语句是从左到右检查的,如果数组大小不正确,则不会达到空值检查。

对于任何情况来说,这都很容易推广。


1
那么如果你设置索引的数组呢?就像 a[0] = 20; a[5] = 30;。如果我检查 if(a.length > 4 && a[4] != null) 它会抛出一个空异常,不是吗? - sdlins
要能够设置索引5,数组在到达if语句之前必须至少具有长度为6。此时它将检查索引是否存在以及其是否为空。不会出现任何异常。 - Baz
是的!抱歉,你是对的!我尝试了编码,它运行良好。我可能混淆了不同的语言概念。谢谢! - sdlins

8

编写一个静态函数

public static boolean indexInBound(String[] data, int index){
    return data != null && index >= 0 && index < data.length;
}

现在,您需要在代码中调用它。
if(indexInBound(ImageLinks, 5) && ImageLinks[5] != null){
   //Your Code
}

这不会处理 null 情况。 - Baz
@Baz 这是针对 ArrayIndexOutOfBoundsException 的处理,如果我们想要处理 Null 条件,我们可以随时添加一个 NullPointerException 的 catch 块。 - Vivek
只是说OP想要同时实现两者。 - Baz
没错,代码中也没有抛出 NPE 的语句。 - Vivek
我对这个答案有几个问题... 1) 异常应该用于处理_异常_行为; 使用异常来处理预期的行为,_例如truefalse检查_,是非常糟糕的。 2) is...Exists 是不好的命名方式。 - CosmicGiant
显示剩余2条评论

6

在进行查找之前,请确保数组长度正确。

if(ImageLinks.length > 5 && ImageLinks[5] != null){}

1

它失败的原因是数组元素少于6个。

首先检查数组是否具有正确数量的元素,然后检查该元素是否存在于数组中。

 if (ImageLinks.length > 5 && ImageLinks[5] != null) {
     // do something
 }

你的答案不正确。请参考以下Java文档页面上的“短路逻辑”: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html - thaspius
如果第一个布尔语句为假,并且在其后有一个&&运算符,则没有继续评估的理由,因为整个语句在那一点上必须为假,无论第二个操作数是真还是假。 - thaspius
更正了答案 - Neil

0

是的,少于6个元素。 ImageLinks[5]指的是第六个元素,因为在Java中,数组索引从0开始。


0
if (ImageLinks != null && Stream.of(ImageLinks).anyMatch(imageLink-> imageLink != null)) {
//An item in array exist
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接