Saltar al contenido

Cómo comprobar si un string contiene todas las letras del alfabeto?

Esta es el arreglo más exacta que encomtrarás dar, pero primero mírala detenidamente y valora si se puede adaptar a tu trabajo.

Solución:

Todas estas soluciones parecen hacer mucho trabajo para una verificación relativamente simple, especialmente dada la API de flujo de Java 8:

/* Your lowercase string */.chars()
    .filter(i -> i >= 'a' && i <= 'z')
    .distinct().count() == 26;

Editar: para la velocidad

Si quieres acabar con la string iteración tan pronto como se encuentre todo el alfabeto mientras se siguen usando flujos, puede realizar un seguimiento con un HashSet internamente:

Set chars = new HashSet<>();
String s = /* Your lowercase string */;
s.length() > 25 && s.chars()
    .filter(i -> i >= 'a' && i <= 'z') //only alphabet
    .filter(chars::add)                //add to our tracking set if we reach this point
    .filter(i -> chars.size() == 26)   //filter the 26th letter found
    .findAny().isPresent();            //if the 26th is found, return

De esta manera, la corriente cesará tan pronto como el Set se llena con los 26 caracteres requeridos.

Hay algunas soluciones (incluso aún) más eficientes en términos de rendimiento a continuación, pero como nota personal, diré que no se atasque demasiado en la optimización prematura, donde podría tener legibilidad y menos esfuerzo al escribir el código real.

List.remove elimina por índice. Desde un char se puede convertir a un int, está eliminando efectivamente valores de índice que no existen, es decir, char 'a' es igual a int 97. Como puede ver, su lista no tiene 97 entradas.

Tu puedes hacer alphabet.remove(alphabets.indexOf(inp));

Como lo señaló @Scary Wombat (https://stackoverflow.com/a/39263836/1226744) y @Kevin Esche (https://stackoverflow.com/a/39263917/1226744), hay una mejor alternativa a su algoritmo

expresión regular es tu amigo. No es necesario usar un List aquí.

public static void main(String[] args) 
    String s = "a dog is running crazily on the ground who doesn't care about the world";
    s = s.replaceAll("[^a-zA-Z]", ""); // replace everything that is not between A-Za-z 
    s = s.toLowerCase();
    s = s.replaceAll("(.)(?=.*\1)", ""); // replace duplicate characters.
    System.out.println(s);
    System.out.println(s.length()); // 18 : So, Nope

    s = "a dog is running crazily on the ground who doesn't care about the world qwertyuioplkjhgfdsazxcvbnm";
    s = s.replaceAll("[^a-zA-Z]", "");
    s = s.toLowerCase();        
    s = s.replaceAll("(.)(?=.*\1)", "");
    System.out.println(s);
    System.out.println(s.length()); //26 (check last part added to String)  So, Yes


Finalizando este artículo puedes encontrar las referencias de otros usuarios, tú asimismo tienes la libertad de mostrar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *