2010-08-26 16 views
31

OK diciamo che ho un array riempito con {"tube", "are", "fun"} e quindi ho un JTextField e se scrivo uno di quei comandi fai qualcosa e se NON vuoi ottenere come un messaggio che dice "Comando non trovato".Trova se una stringa è presente in un array

Ho provato a cercare in documenti Java, ma tutto quello che sto ottenendo sono cose che non voglio come domande e cose ... quindi, come è fatto? So che esiste una funzione "in array" ma non sono molto bravo a combinare i due insieme.

Grazie.

Ecco quello che ho finora:

String[] dan = {"Red", "Orange", "Yellow", "Green", "Blue", "Violet", "Orange", "Blue"}; 
boolean contains = dan.contains(say.getText()); 

ma sto ottenendo non riesce a trovare il simbolo in dan.contains

risposta

55

Questo è quello che stai cercando:

List<String> dan = Arrays.asList("Red", "Orange", "Yellow", "Green", "Blue", "Violet", "Orange", "Blue"); 

boolean contains = dan.contains(say.getText()); 

Se hai un elenco di valori non ripetuti, preferisci utilizzare un Set<String> che ha lo stesso metodo contains

+0

sì! guarda il mio esempio : D – nn2

+0

Questo perché un array non è un set –

+0

@Dan - BZZZT - stai provando a invocare 'contains' su un array, non a un' Set' !!! –

1

Se è possibile organizzare i valori nell'array in ordine, è possibile utilizzare Arrays.binarySearch(). Altrimenti dovrai scrivere un ciclo e una ricerca lineare. Se si prevede di avere una grande (più di una dozzina di) stringhe nell'array, si consiglia di utilizzare invece un Set.

+0

Ehm, sarebbe importante se dicessi che la matrice sarebbe permissiva e non cambiata affatto in un ordine? Ci sarebbe un modo più semplice di? – nn2

+0

@Dan - Penso che la sua prima frase lo risponda. Sai come ordinare le stringhe a mano, vero? –

+0

@ Jim, questa risposta non è corretta. La documentazione di '# binarySearch' afferma esplicitamente:" Se la matrice contiene elementi che non sono comparabili tra loro (ad esempio, stringhe e interi), non può essere ordinato in base all'ordinamento naturale dei suoi elementi, quindi i risultati non sono definiti. " * NON * usare 'binarySearch' su' Integer' o 'String', o qualsiasi elemento che può al massimo avere un ordine parziale. –

28
String[] a= {"tube", "are", "fun"}; 
Arrays.asList(a).contains("any"); 
+0

grazie ... ottimo esempio – Antonio

+0

QUESTO è quello che stavo cercando. Semplice! –

7

Usa Arrays.asList() per avvolgere la matrice in una List<String>, che non ha un metodo contains():.

Arrays.asList(dan).contains(say.getText()) 
1

Questo può essere fatto in Java 8 usando Stream.

import java.util.stream.Stream; 

String[] stringList = {"Red", "Orange", "Yellow", "Green", "Blue", "Violet", "Orange", "Blue"}; 

boolean contains = Stream.of(stringList).anyMatch(x -> x.equals(say.getText()); 
+1

Questa è la migliore risposta. Gli altri falliscono perché 'asList' restituisce generici non parametrizzati. –

Problemi correlati