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
?
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
?
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");
}
}
}
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.
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
Dies führt zu einer Null-Zeiger-Ausnahme, wenn das Array vor dem Zielwert eine Null-Referenz enthält.
Die if-Anweisung sollte lauten: if (targetValue.equals(s)), da String equals einen instanceof-Checker hat.
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.
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.
3 Stimmen
Wenn Sie Apache Commons verwenden, dann org.apache.commons.lang.ArrayUtils.contains() tut dies für Sie.
0 Stimmen
@Zach: Sie tappen in die Falle des for-if-Antipatterns, tun Sie das nicht.
50 Stimmen
@camickr weil Leute, wie ich, eine Frage googeln, auf das SO-Ergebnis klicken, Ihre Antwort sehen, sie testen, es funktioniert, die Antwort hoch bewerten und dann gehen.
2 Stimmen
Ich vermisse wirklich eine einfache
indexOf
etcontains
injava.util.Arrays
- die beide unkomplizierte Schleifen enthalten würden. Ja, Sie können diese in 1 Minute schreiben; aber ich ging trotzdem zu StackOverflow in der Erwartung, sie irgendwo im JDK zu finden.