我有一个String[],其值如下:

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

给定字符串s,是否有一种测试VALUES是否包含s的好方法?


当前回答

只需手动执行即可:

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条件在方法中是常量。在方法调用期间,它始终计算为相同的布尔值。因此,如果输入数组很大,只计算一次这个条件会更有效,我们可以根据结果在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;
}

其他回答

你可以用两种方法检查

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

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));
}

使用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);
}

对于有限长度的阵列,请使用以下内容(由camickr提供)。这对于重复检查来说是缓慢的,特别是对于较长的阵列(线性搜索)。Arrays.asList(…).incontains(…)如果您重复检查一组较大的元素,则可获得快速性能数组结构错误。使用TreeSet并将每个元素添加到其中。它对元素进行排序,并具有快速的exist()方法(二进制搜索)。如果元素实现Comparable,则需要对TreeSet进行相应排序:ElementClass.compareTo()方法必须与ElementClass.equals()兼容:是否看到三合会未出现战斗?(Java Set缺少项目)TreeSet myElements=新TreeSet();//对每个元素执行此操作(实现*可比*)myElements.add(nextElement);//*或者*,如果从其他代码强制提供数组:myElements.addAll(Arrays.asList(myArray));否则,请使用您自己的比较器:类MyComparator实现Comparator<ElementClass>{int compareTo(ElementClass元素1;ElementClass元素2){//元素的比较//应与对象相等性一致}布尔等于(对象otherComparator){//您的比较器相等}}//用比较器构造TreeSetTreeSet myElements=新TreeSet(新MyComparator());//对每个元素执行此操作(实现*可比*)myElements.add(nextElement);回报:检查某些元素的存在://通过排序元素进行快速二进制搜索(性能~日志(大小)):boolean containsElement=myElements.exists(someElement);

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

如果你不想区分大小写

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