2012-02-02 14 views
21

Dato:Come posso verificare che una serie di stringhe contenga una determinata stringa?

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

String input = "Up"; 

Come posso verificare che un input da stdin è all'interno della matrice directions o no?

Posso creare un ciclo e controllare ogni elemento con input utilizzando lo stesso valore, ma sto cercando un modo più elegante.

saluti, Ron

+1

Hai cercato StackOverflow prima di pubblicare la domanda? [link] http://stackoverflow.com/questions/1128723/in-java-how-can-i-test-if-an-array-taintains-a-certain-value) – eternaln00b

risposta

38

convertire la matrice delle direzioni valide a un elenco:

List valid = Arrays.asList(directions) 

O semplicemente dichiarare direttamente come:

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

è quindi possibile utilizzare il metodo contains:

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

Si noti che questo non corrisponderà un ingresso caso misto come "Up", così si potrebbe desiderare di memorizzare solo i valori maiuscoli nella lista e quindi utilizzare valid.contains(input.toUpperCase())

+0

Preferirei foreach on array, sopra la creazione di una nuova lista solo per iterare su di essa ... – dantuch

+0

Domanda per tutti - qualcuno ha idea del perché Java non abbia un metodo Arrays.indexOf()? (a parallelo List.indexOf()). Dato che la serie di stringhe di solito è una cosa statica, trovo la conversione in una lista molto fastidiosa, quindi di solito scrivo la mia piccola utilità di ricerca lineare. – user949300

+0

@ user949300 - usa ArrayList() –

3

Usa ArrayList, invece, e il suo metodo contains

5

Converti l'array in un elenco e utilizza il metodo contains.

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

Il contiene metodo ritorna:

vero se l'elenco contiene l'elemento specificato.

3

Sfortunatamente, Java non ha un metodo Arrays.indexOf(). La cosa migliore è scrivere una piccola utility per fare una semplice ricerca lineare. Oppure puoi convertire in ArrayList (vedi Arrays.asList()) e chiamare indexOf() or contains().

Se la matrice è grande e la velocità è un problema, si potrebbe ordinare l'array, e quindi utilizzare Arrays.binarySearch().

0

Dato che stiamo specificamente parlando di array di stringhe, non solo qualsiasi array: un altro approccio che risolve il caso la domanda di insensibilità avrebbe usato espressioni regolari. Tramite la classe Pattern o la stringa matches method.

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