web-dev-qa-db-fra.com

Comment puis-je vérifier qu'un tableau de chaînes contient une certaine chaîne?

Donné :

String[] directions = {"UP","DOWN","RIGHT","LEFT","up","down","right","left"};

String input = "Up";

Comment puis-je vérifier qu'une entrée de stdin se trouve ou non dans le tableau directions?

Je peux faire une boucle et vérifier chaque élément avec input en utilisant égal, mais je cherche une manière plus élégante.

Cordialement, Ron

27
JAN

Convertissez le tableau des directions valides en une liste:

List valid = Arrays.asList(directions)

Ou déclarez-le directement comme:

List valid = Arrays.asList("UP", "DOWN", "RIGHT", "LEFT", "up", "down", "right", "left")

Vous pouvez ensuite utiliser la méthode contains:

if (valid.contains(input)) {
    // is valid
} else {
    // not valid
}

Notez que cela ne correspondra pas à une entrée de casse mixte telle que "Up", vous voudrez peut-être stocker uniquement les valeurs en majuscules dans la liste, puis utiliser valid.contains(input.toUpperCase())

47
mikej

Convertissez votre tableau en une liste et utilisez la méthode contains .

List mylist = Arrays.asList(directions);
mylist.contains(input);

La méthode contains renvoie:

true si la liste contient l'élément spécifié.

5
RanRag

Malheureusement, Java n'a pas de méthode Arrays.indexOf(). Le mieux est d'écrire un petit utilitaire pour faire une recherche linéaire simple. Ou vous pouvez convertir en ArrayList (voir Arrays.asList()) et appelez indexOf() or contains().

Si le tableau est volumineux et que la vitesse est un problème, vous pouvez trier le tableau, puis utiliser Arrays.binarySearch().

3
user949300

Utilisez à la place ArrayList et sa méthode contains

3
wmz

Puisque nous parlons spécifiquement de tableaux de chaînes, pas n'importe quel tableau: une autre approche qui résout avec élégance la question de l'insensibilité à la casse serait d'utiliser des expressions régulières. Soit par le biais de la classe Pattern , soit par la chaîne correspond à la méthode .

if (input.matches("(?i)" + String.join("|", directions))) {
    // valid
}
else {
    // invalid
}
0
cviejo