如何检查List <string>是否包含特定字符串?

时间:2016-05-19 17:46:40

标签: java list loops

这是我正在尝试做的事情: 我有一些List<String>,如果List包含一个特定的字符串,我想打印一个语句,否则抛出一个Exception但是当我尝试下面的代码时

List<String> fruit = new ArrayList<>();
fruit.add("apple");
fruit.add("orange");
fruit.add("banana");

for(int i = 0; i < fruit.size(); i++){
   if(fruit.get(i).contains("banana"){
     System.out.println("Found");
   } else {
     throw new SkipException("could not be found");
   }
}

它遍历List并在i = 0显然找到“apple”并立即转到else块并抛出异常。我也试过以下,但这也没用。

for(int i = 0; i < fruit.size(); i++){
   if(Arrays.asList(fruit).contains("banana"){
      System.out.println("found");
   }else{
      throw new SkipException("not found");
   }
}

有没有一种简单的方法可以做我想在这里做的事情?

4 个答案:

答案 0 :(得分:6)

有几种方法。

您选择哪一个取决于您,在详细程度之间进行权衡,仅限于简单的等于检查(如果您想进行更复杂的匹配,则无法轻松执行选项1),并使用您可能尚未支持或不熟悉的新API。

选项1 Collection.contains()方法:

List<String> fruit = new ArrayList<>();
fruit.add("apple");
fruit.add("orange");
fruit.add("banana");

if (fruit.contains("banana") {
    System.out.println("Found");
} else {
    throw new SkipException("could not be found");
}

选项2 使用具有外部状态的for循环:

List<String> fruit = new ArrayList<>();
fruit.add("apple");
fruit.add("orange");
fruit.add("banana");

boolean found = false;
for (String s : fruit) {
    if (s.equals("banana")) {
        found = true;
        break; // Break out of the loop to skip the remaining items
    }
}
if (found) {
    System.out.println("Found");
} else {
    throw new SkipException("could not be found");
}

选项3 如果您正在使用Java 8,那么整洁的Stream.anyMatch()方法:

List<String> fruit = new ArrayList<>();
fruit.add("apple");
fruit.add("orange");
fruit.add("banana");

if (fruit.stream().anyMatch(s -> s.equals("banana"))) {
    System.out.println("Found");
} else {
    throw new SkipException("could not be found");
}

选项3是我个人的最爱,因为它几乎和选项1一样紧凑,但如果你想根据{{1}以外的其他东西进行比较,可以提供更复杂的Predicate方法。

答案 1 :(得分:1)

您不必遍历数组列表。一旦调用list.contains("someString"),它将检查整个数组列表中的字符串。因此,以下就足够了。

if(fruit.contains("banana"){
     System.out.println("Found");
} else {
     throw new SkipException("could not be found");
}

答案 2 :(得分:0)

尝试使用此功能 如果在任何索引处,该值等于&#34; banana&#34;它将打印发现其他它将抛出异常

    List<String> fruit = new ArrayList<>();
    fruit.add("apple");
    fruit.add("orange");
    fruit.add("banana");

    for(int i = 0; i < fruit.size(); i++){
      if(fruit.get(i).equals("banana"){
      System.out.println("Found");
      } 
    else {
      throw new SkipException("could not be found");
         }
   }

解决方案2: 当你使用arraylists时,你不需要手动遍历每个索引,而是arraylist给你一个函数&#34; contains()&#34;这将自动检查所需的值是否存在于任何索引,所以只需执行此操作:

    if(fruit.contains("banana"){
         System.out.println("Found");
       } else {
    throw new SkipException("could not be found");
       }

答案 3 :(得分:-1)

尝试使用布尔值来检测您是否在水果列表中找到了水果。像这样:

boolean inlist = false;

for(int i = 0; i < fruit.size(); i++){
   if(fruit.get(i).equals("banana"){
        inlist = true
        break;
   }
}

if (inlist) {
    System.out.println("found");
} else {
    throw new SkipException("not found");
}