2011-03-01 30 views
51

Quiero utilizar el algoritmo de búsqueda binaria para buscar la cadena que ha sido ingresada por el usuario en un archivo ordenado muy grande. No puedo comparar la cadena que ha ingresado el usuario con la cadena que se ha ubicado en la línea media del archivo para continuar mi búsqueda binaria.¿Cómo puedo comparar dos cadenas en Java y definir cuál de ellas es más pequeña que la otra alfabéticamente?

Por ejemplo, si la cadena del usuario es abcda y la cadena del archivo es abcza, es obvio que la cadena del usuario es más pequeña que la cadena del archivo. ¿Cómo se implementa en Java? será genial si me puede ayudar con un código de muestra.

+3

Se debe especificar si es necesario que esto funcione únicamente con cadenas en inglés (ASCII), o si la entrada puede ser potencialmente internacional. Determinar qué cadena se ordena antes que otra es bastante compleja, en este último caso. – unwind

Respuesta

90

Puede utilizar

str1.compareTo(str2); 

Si str1 es lexicográfico menos de str2, a negative number serán devueltos, 0 si es igual o si a positive number cadena1 es mayor.

por ejemplo,

"a".compareTo("b"); // returns a negative number, here -1 
"a".compareTo("a"); // returns 0 
"b".compareTo("a"); // returns a positive number, here 1 
+12

No. El contrato de java.util.Comparable dice que devolverá un entero negativo si el primero es menor que el segundo y un entero positivo si es mayor. Pero no necesariamente -1 y 1. –

+0

@JB Sí, tienes razón, ¡gracias por señalar eso! –

+0

Gracias. Pero si la primera cadena es " abc" y la segunda cadena es "abc". ¿Cómo puedo comparar "<" con "a"? – sylvester

3

¿No has oído hablar de la interfaz Comparable siendo implementado por String? Si no, trate de usar

"abcda".compareTo("abcza") 

Y es la salida de una buena raíz de una solución a su problema.

5

Si desea ignorar el caso de que se utilice la siguiente:

String s = "yip"; 
String best = "yodel"; 
int compare = s.compareToIgnoreCase(best); 
if(compare < 0){ 
    //-1, --> s is less than best. (s comes alphabetically first) 
} 
else if(compare > 0){ 
// best comes alphabetically first. 
} 
else{ 
    // strings are equal. 
} 
Cuestiones relacionadas