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
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())
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é.
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().
Utilisez à la place ArrayList
et sa méthode contains
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
}