2717 Stimmen

Wie kann ich in Java feststellen, ob ein Array einen bestimmten Wert enthält?

Ich habe eine String[] mit Werten wie diesen:

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

Gegeben String s Gibt es eine gute Methode, um zu testen, ob VALUES enthält s ?

6 Stimmen

Das ist ein langer Weg, aber Sie können eine for-Schleife verwenden: "for (String s : VALUES) if (s.equals("MYVALUE")) return true;

1 Stimmen

Ja, es war mir fast peinlich, die Frage zu stellen, aber gleichzeitig war ich überrascht, dass sie noch nicht gestellt worden war. Es ist eine dieser APIs, mit denen ich einfach noch nicht in Berührung gekommen bin...

3 Stimmen

@camickr - ich habe eine fast identische Situation mit diesem hier: stackoverflow.com/a/223929/12943 Es wird immer wieder abgestimmt, obwohl es nur ein Copy/Paste aus der Sun-Dokumentation war. Ich schätze, die Bewertung basiert darauf, wie viel Hilfe man geleistet hat und nicht darauf, wie viel Mühe man sich gegeben hat - und vor allem darauf, wie schnell man es veröffentlicht hat! Vielleicht sind wir auf das Geheimnis von John Skeet gestoßen! Nun, gute Antwort, +1 für Sie.

10voto

Eine mögliche Lösung:

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

6voto

Abhishek Oza Punkte 3062

Verwenden Sie die folgenden (die contains() Methode ist ArrayUtils.in() in diesem Code):

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

Wie Sie im obigen Code sehen können, gibt es noch weitere Hilfsmethoden ObjectUtils.equals() y ArrayUtils.indexOf() die auch an anderen Orten verwendet wurden.

6voto

Kaplan Punkte 1226

die kürzeste Lösung
das Array VALUES kann Duplikate enthalten
seit Java 9

List.of(VALUES).contains(s);

6voto

Ryan Punkte 2747

Die Verwendung einer einfachen Schleife ist die effizienteste Art, dies zu tun.

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

Mit freundlicher Genehmigung an Programcreek

0 Stimmen

Dies führt zu einer Null-Zeiger-Ausnahme, wenn das Array vor dem Zielwert eine Null-Referenz enthält.

1 Stimmen

Die if-Anweisung sollte lauten: if (targetValue.equals(s)), da String equals einen instanceof-Checker hat.

0 Stimmen

Verwenden Sie stattdessen Objects.equals(obj1,obj2), um null sicher zu sein.

5voto

Wenn Sie die Groß- und Kleinschreibung nicht beachten wollen

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X