2012-02-02 9 views
21

dado:¿Cómo puedo verificar que una matriz de cadenas contenga una cierta cadena?

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

String input = "Up"; 

¿Cómo puedo verificar que una entrada de stdin está dentro de la gama directions o no?

Puedo hacer un ciclo y verificar cada elemento con input usando igual, pero estoy buscando una forma más elegante.

cordiales, Ron

+1

¿Ha buscado Stackoverflow antes de publicar la pregunta? [link] http://stackoverflow.com/questions/1128723/in-java-how-can-i-test-if-an-array-contains-a-certain-value) – eternaln00b

Respuesta

38

convertir la matriz de direcciones válidas para una lista:

List valid = Arrays.asList(directions) 

O simplemente declarar directamente como:

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

A continuación, puede utilizar el método contains:

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

Tenga en cuenta que esto no va a coincidir con una entrada de mayúsculas y minúsculas, como "arriba" por lo que es posible que desee guardar sólo los valores de mayúsculas en la lista y luego usar valid.contains(input.toUpperCase())

+0

Preferiría foreach en array, sobre la creación de una nueva lista solo para iterar en ella ... – dantuch

+0

Pregunta para todo el mundo: ¿alguien tiene alguna idea de por qué Java no tiene un método Arrays.indexOf()? (a la lista List.indexOf()). Como la matriz de cadenas suele ser algo final estático, creo que la conversión a una lista es muy molesta, así que generalmente escribo mi propia pequeña utilidad de búsqueda lineal. – user949300

+0

@ user949300 - use ArrayList() –

3

Uso ArrayList lugar y su método contains

5

Convierta su matriz en una lista y luego use el método contains.

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

El contiene devuelve el método:

cierto si la lista contiene el elemento especificado.

3

Desafortunadamente, Java no tiene un método Arrays.indexOf(). Su mejor opción es escribir una pequeña utilidad para hacer una búsqueda lineal simple. O puede convertir a un ArrayList (vea Arrays.asList()) y llame al indexOf() or contains().

Si la matriz es grande y la velocidad es una preocupación, usted podría ordenar la matriz, y luego usar Arrays.binarySearch().

0

Ya que estamos hablando específicamente sobre matrices de cadenas, no cualquier matriz: otro enfoque que resuelve el caso -insensibilidad a la pregunta de manera elegante sería el uso de expresiones regulares. Ya sea a través de la clase Pattern o del String's matches method.

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