如何确定数组在Java中是否包含特定值?


2275

我有一个String[]像这样的值:

public static final String[] VALUES = new String[] {"AB","BC","CD","AE"};

给定String s,有没有一种很好的方法来测试是否VALUES包含s


5
很长的路要走,但是您可以使用for循环:“ for(String s:VALUES)if(s.equals(“ MYVALUE”))返回true;
Zack

70
@camickr。对于您的问题,我赞成这个问题和您的答案-现在-,因为它为我节省了30分钟和20行代码编写的丑陋的循环-now-。三年前没看过。(顺便说一句,谢谢:))
追求

3
@camickr-我对此情况几乎相同:stackoverflow.com/a/223929/12943 它只是在不断获得选票,而仅仅是从sun的文档中复制/粘贴。我猜分数是基于您提供的帮助而不是您投入的精力-主要取决于您发布它的速度!也许我们偶然发现了John Skeet的秘密!好答案,为您+1。
Bill K

1
如果您使用的是Apache Commons,那么org.apache.commons.lang.ArrayUtils.contains()会为您完成此操作。
Boy Boy先生

34
@camickr,因为像我这样的人在Google上搜索一个问题,然后点击搜索结果,查看答案,对其进行测试,就可以了,投票支持答案,然后离开。
Aequitas

Answers:


2919
Arrays.asList(yourArray).contains(yourValue)

警告:这不适用于图元数组(请参见注释)。


以来 您现在可以使用流。

String[] values = {"AB","BC","CD","AE"};
boolean contains = Arrays.stream(values).anyMatch("s"::equals);

要检查的阵列是否intdoublelong包含一个值使用IntStreamDoubleStreamLongStream分别。

int[] a = {1,2,3,4};
boolean contains = IntStream.of(a).anyMatch(x -> x == 4);

87
对于此功能与Arrays类中的搜索功能的性能以及在数组上迭代并为基本类型使用equals()函数或==的性能,我有些好奇。
Thomas Owens

186
您不会损失太多,因为asList()返回一个ArrayList,其核心是数组。构造函数将只更改一个引用,因此在那里不需要做很多工作。并且contains()/ indexOf()将迭代并使用equals()。但是,对于基元,最好自己编写代码。对于字符串或其他类,差异将不会明显。
乔伊,2009年

18
奇怪的是,NetBeans声称“ int []个假日”的“ Arrays.asList(holidays)”返回一个“ list <int []>”,而不是“ list <int>”。它仅包含一个元素。这意味着“包含”不起作用,因为它只有一个元素。int数组。
Nyerguds 2010年

62
Nyerguds:确实,这不适用于基元。在Java中,原始类型不能通用。asList被声明为<T> List <T> asList(T ...)。当您将int []传递给它时,编译器将推断T = int [],因为它不能推断T = int,因为原语不能是通用的。
CromTheDestroyer 2011年

28
@Joey只是一个旁注,它是一个ArrayList,但并非java.util.ArrayList您所期望的那样,返回的实际类是:java.util.Arrays.ArrayList<E>定义为:public class java.util.Arrays {private static class ArrayList<E> ... {}}
TWiStErRob 2012年

362

Java SE 9的简要更新

引用数组不好。对于这种情况,我们要紧紧抓住。从Java SE 9开始,我们有了Set.of

private static final Set<String> VALUES = Set.of(
    "AB","BC","CD","AE"
);

“给出String,是否有测试VALUES是否包含s的好方法?”

VALUES.contains(s)

O(1)。

权利类型不可变的O(1)简洁。美丽。*

原始答案详细信息

只是为了清除代码。我们(已更正):

public static final String[] VALUES = new String[] {"AB","BC","CD","AE"};

这是一个可变的静态函数,FindBugs会告诉您这很顽皮。不要修改静态变量,也不要让其他代码也这样做。绝对最小值,该字段应为私有:

private static final String[] VALUES = new String[] {"AB","BC","CD","AE"};

(注意,您实际上可以删除该new String[];位。)

引用数组仍然很糟糕,我们需要一个集合:

private static final Set<String> VALUES = new HashSet<String>(Arrays.asList(
     new String[] {"AB","BC","CD","AE"}
));

(如我这样的偏执狂人,如果把Collections.unmodifiableSet它包裹起来,可能会感到更自在-甚至可以公开。)

(*在品牌上要多说一点,按我的喜好,collection API仍会缺少不可变的collection类型,并且语法仍然太冗长。)


184
首先是创建集合的O(N):)
Drew Noakes

60
如果它是静态的,则可能要使用很多次。因此,与大量线性搜索的成本相比,初始化集合所花费的时间很可能很小。
Xr。

1
然后创建集合将由代码加载时间决定(技术上是O(n),但实际上是恒定的)。
Tom Hawtin-抢险

2
@ TomHawtin-tackline为什么您说“特别是在这里我们想要一套”?在这种情况下,集合(HashSet)的优点是什么?为什么“引用数组”不好(“引用数组”是指ArrayList由调用生成的数组支持Arrays.asList)?
罗勒·布尔克

6
@nmr A TreeSet将是O(log n)HashSet对s进行缩放,以使存储桶中的平均元素数量大致恒定。至少对于2 ^ 30以下的阵列。例如,可能受到big-O分析忽略的硬件缓存的影响。还假定哈希函数有效运行。
汤姆·霍顿-大头钉

206

您可以ArrayUtils.containsApache Commons Lang使用

public static boolean contains(Object[] array, Object objectToFind)

请注意,false如果传递的数组为,则此方法返回null

也有各种方法可用于各种原始数组。

例:

String[] fieldsToInclude = { "id", "name", "location" };

if ( ArrayUtils.contains( fieldsToInclude, "id" ) ) {
    // Do some stuff.
}

4
我同意@ max4ever,但这比“自己动手”更好,而且比原始的java方法更易于阅读。
杰森


38
@ max4ever有时您已经包含了此库(由于其他原因),这是一个非常有效的答案。我一直在寻找它,我已经依赖于Apache Commons Lang。感谢您的回答。
GuiSim 2014年

1
或者,您可以只复制该方法(如果有的话,还可以复制)。
布法罗2015年

10
@ max4ever Proguard将大多数android应用程序最小化,仅将您需要的类和函数放入应用程序中。这样就等于自己滚动或复制apache的来源。不用这种最小化的人就不必抱怨700kb或78kb了:)
Kenyakorn Ketsombut

158

只需手动实施即可:

public static <T> boolean contains(final T[] array, final T v) {
    for (final T e : array)
        if (e == v || v != null && v.equals(e))
            return true;

    return false;
}

改善:

v != null方法内部的条件是恒定的。在方法调用期间,它始终求值为相同的布尔值。因此,如果输入array很大,则仅一次评估此条件会更有效率,并且我们可以for根据结果在循环内使用简化/更快的条件。改进的contains()方法:

public static <T> boolean contains2(final T[] array, final T v) {
    if (v == null) {
        for (final T e : array)
            if (e == null)
                return true;
    } 
    else {
        for (final T e : array)
            if (e == v || v.equals(e))
                return true;
    }

    return false;
}

9
@Phoexo此解决方案显然更快,因为可接受的答案将数组包装到列表中,并在该列表上调用contains()方法,而我的解决方案基本上只执行contains()会做的事情。
icza 2012年

10
@AlastorMoody e == v进行引用相等性检查非常快。如果数组中有相同的对象(按引用相同),则会更快地找到它。如果实例不同,则它可能仍然与equals()方法所要求的实例相同,这将检查引用是否相同。
icza

20
为什么此功能不是Java的一部分?难怪有人说Java太过膨胀了……看看上面所有的答案,当您需要的只是一个for循环时,便使用了一堆库。这些天孩子们!
phreakhead

4
@phreakhead它是Java的一部分,请参见Collection.contains(Object)
Steve Kuo

11
@icza如果你看一下的来源ArraysArrayList事实证明,这未必比使用的版本速度更快Arrays.asList(...).contains(...)ArrayListArrayList.contains()上面显示的循环(JDK 7)相比,创建一个循环的开销非常小,并且使用了一个更智能的循环(实际上,它使用了两个不同的循环)。
Axel

72

四种不同的方法检查数组是否包含值

1)使用清单:

public static boolean useList(String[] arr, String targetValue) {
    return Arrays.asList(arr).contains(targetValue);
}

2)使用Set:

public static boolean useSet(String[] arr, String targetValue) {
    Set<String> set = new HashSet<String>(Arrays.asList(arr));
    return set.contains(targetValue);
}

3)使用一个简单的循环:

public static boolean useLoop(String[] arr, String targetValue) {
    for (String s: arr) {
        if (s.equals(targetValue))
            return true;
    }
    return false;
}

4)使用Arrays.binarySearch():

下面的代码是错误的,此处出于完整性目的列出了该代码。binarySearch()仅可用于排序数组。您会发现下面的结果很奇怪。这是对数组进行排序时的最佳选择。

public static boolean binarySearch(String[] arr, String targetValue) {  
            int a = Arrays.binarySearch(arr, targetValue);
            return a > 0;
        }

快速示例:

String testValue="test";
String newValueNotInList="newValue";
String[] valueArray = { "this", "is", "java" , "test" };
Arrays.asList(valueArray).contains(testValue); // returns true
Arrays.asList(valueArray).contains(newValueNotInList); // returns false

5
您的二进制搜索示例应返回> 0;
Will Sherwood

6
为什么?我认为它应该返回> -1,因为0表示它包含在数组的开头。
mbelow

1
第一个带有的变量(a >= 0)是正确的,只需检查docs,他们就会说:“请注意,这保证了当且仅当找到键时,返回值才> = 0”。
Yoory N.

为什么对String而不对int起作用?静态布尔存在(int [] int,int k){return Arrays.asList(ints).contains(k); }
马丁斯

71

如果数组未排序,则必须遍历所有内容并在每个数组上调用equals。

如果数组已排序,则可以进行二进制搜索,Arrays类中有一个。

一般来说,如果要进行大量成员资格检查,则可能需要将所有内容存储在Set中,而不是存储在数组中。


1
另外,就像我在回答中说的那样,如果您使用Arrays类,则可以对数组进行排序,然后对新排序的数组执行二进制搜索。
Thomas Owens

1
@托马斯:我同意。或者,您可以将所有内容添加到TreeSet中;同样的复杂性。如果不变,我会使用Arrays(也许可以节省一点内存位置,因为尽管字符串没有,但是引用是连续定位的)。如果这会随着时间而改变,我将使用该集。
Uri

49

为了进行测试,我进行了一项测试,比较了3条关于速度的建议。我生成了随机整数,将其转换为字符串并将其添加到数组中。然后,我搜索了可能的最高数字/字符串,这对于来说是最坏的情况asList().contains()

使用10K数组大小时,结果为:

排序和搜索:15
二进制搜索:0
asList.contains:0

使用100K数组时,结果为:

排序和搜索:156
二进制搜索:0
asList.contains:32

因此,如果按排序顺序创建数组,则二进制搜索是最快的,否则asList().contains将是解决方法。如果搜索次数很多,那么对数组进行排序可能是值得的,以便可以使用二进制搜索。这完全取决于您的应用程序。

我认为这些是大多数人期望的结果。这是测试代码:

import java.util.*;

public class Test
{
    public static void main(String args[])
    {
        long start = 0;
        int size = 100000;
        String[] strings = new String[size];
        Random random = new Random();


        for (int i = 0; i < size; i++)
            strings[i] = "" + random.nextInt( size );

        start = System.currentTimeMillis();
        Arrays.sort(strings);
        System.out.println(Arrays.binarySearch(strings, "" + (size - 1) ));
        System.out.println("Sort & Search : " + (System.currentTimeMillis() - start));

        start = System.currentTimeMillis();
        System.out.println(Arrays.binarySearch(strings, "" + (size - 1) ));
        System.out.println("Search        : " + (System.currentTimeMillis() - start));

        start = System.currentTimeMillis();
        System.out.println(Arrays.asList(strings).contains( "" + (size - 1) ));
        System.out.println("Contains      : " + (System.currentTimeMillis() - start));
    }
}

6
我不懂这段代码。您对数组“字符串”进行排序,并在对binarySearch的两次调用中使用相同(排序的)数组。除HotSpot运行时优化外,如何显示?与asList.contains调用相同。您从排序后的数组中创建一个列表,然后在列表中包含最高值。当然,这需要时间。此测试的含义是什么?更不用说是写的不正确的微基准测试
Erik

同样,由于二进制搜索只能应用于排序后的集合,因此排序和搜索是使用二进制搜索的唯一可能方法。
Erik

排序可能已经出于多种其他原因进行了,例如,可以在init上进行排序,并且永远不会更改。可以单独测试搜索时间。然而,这种下降的地方还不如微基准测试的出色例子。众所周知,微基准测试很难在Java中正确实现,例如,应该在运行实际测试之前包括执行足够的测试代码以实现热点优化,更不用说运行带有计时器的ONCE了。陷阱示例
Thor84no,2013年

7
该测试存在缺陷,因为它在同一个 JVM实例中运行所有3个测试。较晚的测试可能会受益于较早的测试,它们会预热缓存,JIT等
Steve Kuo

4
该测试实际上是完全无关的。排序和搜索是线性的(n * log(n))复杂度,二进制搜索是对数的,ArrayUtils.contains显然是线性的。比较这些解决方案是没有用的,因为它们属于完全不同的复杂性类别。
2014年

37

您也可以不使用快速数组初始化语法,而直接使用Arrays.asList方法以类似的方式将其初始化为List,例如:

public static final List<String> STRINGS = Arrays.asList("firstString", "secondString" ...., "lastString");

然后您可以做(如上):

STRINGS.contains("the string you want to find");

35

使用Java 8,您可以创建一个流并检查流中是否有任何条目匹配"s"

String[] values = {"AB","BC","CD","AE"};
boolean sInArray = Arrays.stream(values).anyMatch("s"::equals);

或作为通用方法:

public static <T> boolean arrayContains(T[] array, T value) {
    return Arrays.stream(array).anyMatch(value::equals);
}

3
值得一提的是原始专业化。
skiwi 2014年

另外,anyMatchJavaDoc声明它为"...May not evaluate the predicate on all elements if not necessary for determining the result.",因此找到匹配项后可能不需要继续处理。
mkobit 2014年

28

您可以使用Arrays类对值执行二进制搜索。如果未对数组进行排序,则必须使用同一类中的sort函数对数组进行排序,然后对其进行搜索。


您可以在同一个类中使用sort函数来完成...我应该将其添加到我的答案中。
Thomas Owens

1
我认为,这可能会比asList()。contains()方法花费更多。除非您需要经常进行检查(否则,公平地说,如果它只是可以排序的静态值列表)。
乔伊,

真正。有许多变量是最有效的。最好有选择。
Thomas Owens

某些执行此操作的代码:stackoverflow.com/a/48242328/9131078
OOBalance

为搜索目的对整个数组进行排序非常昂贵。我们可以将相同的CPU时间用于线性搜索本身。我更喜欢对已经按排序顺序构建的集合进行二进制搜索。
arunwithasmile '18

17

ObStupidAnswer(但我认为这里有一个教训):

enum Values {
    AB, BC, CD, AE
}

try {
    Values.valueOf(s);
    return true;
} catch (IllegalArgumentException exc) {
    return false;
}

1
异常抛出显然很繁重,但是如果可行,这将是一种测试值的新颖方法。缺点是必须事先定义枚举。
James P.

13

实际上,如果您按照Tom Hawtin的建议使用HashSet <String>,则无需担心排序,并且速度与对预排序数组进行二进制搜索的速度相同,甚至可能更快。

显然,这全取决于代码的设置方式,但从我的立场来看,顺序将是:

未排序的数组上:

  1. 哈希集
  2. asList
  3. 排序和二进制

在排序数组上:

  1. 哈希集
  2. 二元
  3. asList

因此,无论哪种方式,HashSet都是胜利。


2
HashSet成员资格应为O(1),对已排序集合的二进制搜索为O(log n)。
Skylar Saveland 2014年

11

如果您拥有谷歌收藏库,可以使用ImmutableSet(http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/ImmutableSet.html)大大简化Tom的答案。

这确实消除了建议的初始化过程中的很多混乱情况

private static final Set<String> VALUES =  ImmutableSet.of("AB","BC","CD","AE");

10

一种可能的解决方案:

import java.util.Arrays;
import java.util.List;

public class ArrayContainsElement {
  public static final List<String> VALUES = Arrays.asList("AB", "BC", "CD", "AE");

  public static void main(String args[]) {

      if (VALUES.contains("AB")) {
          System.out.println("Contains");
      } else {
          System.out.println("Not contains");
      }
  }
}

8

开发人员经常这样做:

Set<String> set = new HashSet<String>(Arrays.asList(arr));
return set.contains(targetValue);

上面的代码有效,但是无需转换列表以首先设置。将列表转换为集合需要额外的时间。它可以很简单:

Arrays.asList(arr).contains(targetValue);

要么

   for(String s: arr){
        if(s.equals(targetValue))
            return true;
    }

return false;

第一个比第二个更具可读性。


7

使用简单循环是执行此操作的最有效方法。

boolean useLoop(String[] arr, String targetValue) {
    for(String s: arr){
        if(s.equals(targetValue))
            return true;
    }
    return false;
}

Programcreek提供


如果数组在目标值之前包含空引用,则将抛出空指针异常。
塞缪尔·埃德温·沃德

1
if语句应该是:if(targetValue.equals(s)),因为String equals具有instanceof checker。
TheArchon

请改用Objects.equals(obj1,obj2)为null安全。
三部曲

7

Java 8中使用Streams。

List<String> myList =
Arrays.asList("a1", "a2", "b1", "c2", "c1");

myList
.stream()
.filter(s -> s.startsWith("c"))
.map(String::toUpperCase)
.sorted()
.forEach(System.out::println);

7
这种方法有什么好处吗?
Johannes Stadler

1
它没有回答问题。
Florian F

5
  1. 对于有限长度的数组,请使用以下内容(由camickr给出)。对于重复检查,这很慢,特别是对于较长的数组(线性搜索)而言。

     Arrays.asList(...).contains(...)
  2. 为了提高性能,如果您反复检查较大的一组元素

    • 数组是错误的结构。使用a TreeSet并将每个元素添加到其中。它对元素进行排序并具有快速exist()方法(二进制搜索)。

    • 如果元素实现Comparable&您想要相应地TreeSet排序:

      ElementClass.compareTo()方法必须与兼容ElementClass.equals():请参阅三合会未露面打架?(Java Set缺少项目)

      TreeSet myElements = new TreeSet();
      
      // Do this for each element (implementing *Comparable*)
      myElements.add(nextElement);
      
      // *Alternatively*, if an array is forceably provided from other code:
      myElements.addAll(Arrays.asList(myArray));
    • 否则,请使用您自己的Comparator

      class MyComparator implements Comparator<ElementClass> {
           int compareTo(ElementClass element1; ElementClass element2) {
                // Your comparison of elements
                // Should be consistent with object equality
           }
      
           boolean equals(Object otherComparator) {
                // Your equality of comparators
           }
      }
      
      
      // construct TreeSet with the comparator
      TreeSet myElements = new TreeSet(new MyComparator());
      
      // Do this for each element (implementing *Comparable*)
      myElements.add(nextElement);
    • 回报:检查某些元素的存在:

      // Fast binary search through sorted elements (performance ~ log(size)):
      boolean containsElement = myElements.exists(someElement);

4
为什么要打扰TreeSetHashSet更快(O(1))并且不需要排序。
肖恩·欧文

4

尝试这个:

ArrayList<Integer> arrlist = new ArrayList<Integer>(8);

// use add() method to add elements in the list
arrlist.add(20);
arrlist.add(25);
arrlist.add(10);
arrlist.add(15);

boolean retval = arrlist.contains(10);
if (retval == true) {
    System.out.println("10 is contained in the list");
}
else {
    System.out.println("10 is not contained in the list");
}

4

使用以下内容(该contains()方法ArrayUtils.in()在此代码中):

ObjectUtils.java

public class ObjectUtils{

    /**
     * A null safe method to detect if two objects are equal.
     * @param object1
     * @param object2
     * @return true if either both objects are null, or equal, else returns false.
     */
    public static boolean equals(Object object1, Object object2){
        return object1==null ? object2==null : object1.equals(object2);
    }

}

ArrayUtils.java

public class ArrayUtils{

    /**
     * Find the index of of an object is in given array, starting from given inclusive index.
     * @param ts  Array to be searched in.
     * @param t  Object to be searched.
     * @param start  The index from where the search must start.
     * @return Index of the given object in the array if it is there, else -1.
     */
    public static <T> int indexOf(final T[] ts, final T t, int start){
        for(int i = start; i < ts.length; ++i)
            if(ObjectUtils.equals(ts[i], t))
                return i;
        return -1;
    }

    /**
     * Find the index of of an object is in given array, starting from 0;
     * @param ts  Array to be searched in.
     * @param t  Object to be searched.
     * @return  indexOf(ts, t, 0)
     */
    public static <T> int indexOf(final T[] ts, final T t){
        return indexOf(ts, t, 0);
    }

    /**
     * Detect if the given object is in the given array.
     * @param ts  Array to be searched in.
     * @param t  Object to be searched.
     * @return  If indexOf(ts, t) is greater than -1.
     */
    public static <T> boolean in(final T[] ts, final T t){
        return indexOf(ts, t) > -1 ;
    }

}

正如您在上面的代码中看到的那样,还有其他实用程序方法ObjectUtils.equals()ArrayUtils.indexOf(),它们也在其他地方使用。


我参加这个讨论很晚了,但是由于几年前我解决这个问题的方法与这里已经发布的其他答案有些不同,因此我发布了当时使用的解决方案,在这里,以防万一有人觉得有用。
Abhishek Oza

3

检查一下

String[] VALUES = new String[] {"AB","BC","CD","AE"};
String s;

for(int i=0; i< VALUES.length ; i++)
{
    if ( VALUES[i].equals(s) )
    { 
        // do your stuff
    } 
    else{    
        //do your stuff
    }
}

1
这是行不通的-它将else每个不匹配的项目输入。(因此,如果您要在该数组中查找“ AB”,它将去3次,因为其中3个值不是“ AB” ”)。
Bernhard Barker

3

Arrays.asList()->然后调用contains()方法将始终有效,但是搜索算法要好得多,因为您无需在数组周围创建轻量级列表包装器,这就是Arrays.asList()所做的。

public boolean findString(String[] strings, String desired){
   for (String str : strings){
       if (desired.equals(str)) {
           return true;
       }
   }
   return false; //if we get here… there is no desired String, return false.
}

Arrays.asList不是O(n)。这只是一个轻巧的包装。看一下实现。
帕特里克·帕克

3

如果您不希望它区分大小写

Arrays.stream(VALUES).anyMatch(s::equalsIgnoreCase);

2

是否Array.BinarySearch(array,obj)用于在数组中查找给定的对象。

例:

if (Array.BinarySearch(str, i) > -1)`  true --exists

假-不存在


4
Array.BinarySearch并且Array.FindIndex是.NET方法,并在Java中不存在。
ataylor 2013年

@atayl或Java中的Arrays.binarySearch。但你说得对,没有Arrays.findIndex
mente

应该指出的是:The array must be sorted prior to making this call. If it is not sorted, the results are undefined.
Dorian Gray

1

创建一个初始设置为false的布尔值。运行循环以检查数组中的每个值,然后将其与要检查的值进行比较。如果匹配成功,请将boolean设置为true并停止循环。然后断言布尔是真的。


1

尝试使用Java 8谓词测试方法

这是一个完整的例子。

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class Test {
 public static final List<String> VALUES = Arrays.asList("AA", "AB", "BC", "CD", "AE");

 public static void main(String args[]) {
  Predicate<String> containsLetterA = VALUES -> VALUES.contains("AB");
  for (String i : VALUES) {

   System.out.println(containsLetterA.test(i));
  } 
 }
}

http://mytechnologythought.blogspot.com/2019/10/java-8-predicate-test-method-example.html

https://github.com/VipulGulhane1/java8/blob/master/Test.java


0

使用a Spliterator 可防止不必要的产生 List

boolean found = false;  // class variable

String search = "AB";
Spliterator<String> spl = Arrays.spliterator( VALUES, 0, VALUES.length );
while( (! found) && spl.tryAdvance(o -> found = o.equals( search )) );

found == true如果search包含在数组中


确实适用于原始数组

public static final int[] VALUES = new int[] {1, 2, 3, 4};
boolean found = false;  // class variable

int search = 2;
Spliterator<Integer> spl = Arrays.spliterator( VALUES, 0, VALUES.length );


-2

您可以通过两种方法进行检查

A)通过将数组转换为字符串,然后通过.contains方法检查所需的字符串

 String a=Arrays.toString(VALUES);
    System.out.println(a.contains("AB"));
    System.out.println(a.contains("BC"));
    System.out.println(a.contains("CD"));
    System.out.println(a.contains("AE"));

B)这是一种更有效的方法

 Scanner s=new Scanner(System.in);


   String u=s.next();
   boolean d=true;
    for(int i=0;i<VAL.length;i++)
    {
        if(VAL[i].equals(u)==d)
            System.out.println(VAL[i] +" "+u+VAL[i].equals(u));  

    }

1
字符串转换效率低下,解决方案不正确,例如contains(“,”)将返回true。
Atuos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.