2010-08-26 23 views
31

OK digamos que tengo una matriz llena de {"tube", "are", "fun"} y luego tengo un JTextField y si escribo cualquiera de esos comandos para hacer algo y si NO se pone como un mensaje que dice "Comando no encontrado".Buscar si una cadena está presente en una matriz

Intenté buscar en documentos Java pero todo lo que obtengo son cosas que no quiero como preguntas y esas cosas ... así que, ¿cómo se hace? Sé que hay una función "en conjunto", pero no soy muy bueno con la combinación de los dos.

Gracias.

Esto es lo que tengo hasta ahora:

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

pero yo estoy haciendo no se puede encontrar el símbolo en dan.contains

Respuesta

55

Esto es lo que está buscando:

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

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

Si tiene una lista de valores no repetidos, prefiera usar un Set<String> que tenga el mismo método contains

+0

yep! mira mi ejemplo : D – nn2

+0

Eso es porque una matriz no es un conjunto –

+0

@Dan - BZZZT - está intentando invocar 'contains' en una matriz, ¡no en' Set' !!! –

1

Si puede organizar los valores en la matriz en orden ordenado, puede usar Arrays.binarySearch(). De lo contrario, tendrá que escribir un bucle y una búsqueda lineal. Si planea tener una cadena grande (más de unas pocas docenas) en la matriz, considere usar un conjunto en su lugar.

+0

Erm, ¿importaría si dijera que la matriz sería permanente y no cambiada en un pedido? ¿Habría una manera más fácil que? – nn2

+0

@Dan - Creo que su primera oración responde eso. Sabes cómo ordenar las cuerdas a mano, ¿no? –

+0

@Jim, esta respuesta es incorrecta. La documentación de '# binarySearch' establece explícitamente:" Si la matriz contiene elementos que no son mutuamente comparables (por ejemplo, cadenas y números enteros), no se puede clasificar de acuerdo con el orden natural de sus elementos, por lo tanto, los resultados no están definidos ". * NO * use 'binarySearch' en' Entero' o 'Cadena', o cualquier elemento que pueda tener como máximo un orden parcial. –

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

gracias ... gran ejemplo – Antonio

+0

ESTO es lo que estaba buscando. Sencillo ! –

7

Uso Arrays.asList() para envolver la matriz en un List<String>, que no tiene un método contains():.

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

Esto se puede hacer en Java 8 Uso de alimentación.

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

Esta es la mejor respuesta. Los otros fallan porque 'asList' devuelve genéricos no parametrizados. –

Cuestiones relacionadas