lunedì 15 settembre 2014

CONTROLLARE CARATTERI IN STRINGA (JAVA)

Dopo aver visto i differenti approcci con cui è possibile individuare caratteri e simboli in una stringa (link all'articolo), ecco la versione in linguaggio Java.




Proprio come l'articolo precedente, vengono proposti i medesimi tre metodi di risoluzione del problema.

Metodo 1 - La classe Character

La classe java.lang.Character mette a disposizione dei metodi statici utili a discriminare se un carattere è una lettera, un numero o un simbolo:
public boolean method1(String what){
    boolean result = true;
    char c;
    for(int i=0;i<what.length();i++){
        c = what.charAt(i);
        if(!((Character.isLetter(c))||(Character.isDigit(c)))){
            result = false;
            break;
        }
    }
    return result;
}

Metodo 2 - Le Espressioni Regolari

Molto più elegante è la soluzione che prevede l'utilizzo di espressioni regolari per controllare l'input. Questa strategia viene spesso evitata dai programmatori neofiti a causa delle difficoltà che ci possono essere ad imparare o ricordarsi tutte le specifiche delle stringhe di matching. Interessante notare come lo stesso metodo in Java, rispetto alla versione dotNet, ha l'ordine dei parametri invertito.
//import java.util.regex.Pattern;
public boolean method2(String what){
    return Pattern.matches("^[a-zA-Z0-9]+$",what);
}

Metodo 3 - L'algoritmo "fatto in casa"

Questo algoritmo sfrutta il principio per cui ogni carattere è rappresentato, tramite codifica ASCII o UNICODE, da un valore numerico. Sulla base di questo è possibile effettare un cast di un carattere nel suo valore intero, quindi controllare il valore del numero per discriminare lettere, numeri e simboli.
public boolean method3(String what){
    boolean result=true;
    int ascii;
    for(int i=0;i<what.length();i++){
        ascii = (int)what.charAt(i);
        if(ascii<48) result=false;
        if((ascii>57)&&(ascii<65)) result=false;
        if((ascii>90)&&(ascii<97)) result=false;
        if(ascii>122) result=false;
    }
    return result;
}

Conclusione

Dopo aver visto come risolvere il problema con la piattaforma dotNet è interessante vedere come fare le stesse cose in Java. Naturalmente il motivo per cui ho scritto il primo articolo era dato dal fatto che stavo utilizzando una piattaforma dotNet "castrata" cosa che in java, per ora, non mi è ancora capitato (per fortuna).

Nessun commento:

Posta un commento