Convalida dell'input in Java
La convalida è il processo di verifica dell’input dell’utente o dei valori dal database rispetto a vincoli specifici. La convalida viene applicata per ridurre il tempo impiegato dal programma per eseguire la logica di business effettiva e quindi trovare problemi nell’input dell’utente. Il processo aumenta le prestazioni e quindi comporta ulteriori sessioni di debug in caso di errore.
Nel codice Java, prendiamo l’input dell’utente utilizzando la classe Scanner
. Esistono vari metodi della classe Scanner che aiutano nella convalida del contenuto di input.
Di seguito è riportato il blocco di codice che spiega i metodi.
import java.util.Scanner;
public class InputValidation {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter any text: ");
while (!scanner.hasNext("quit")) {
System.out.println(scanner.hasNextInt() ? "The Input text is int: " + scanner.nextInt()
: scanner.hasNextLong() ? "The Input text is long: " + scanner.nextLong()
: scanner.hasNextDouble() ? "The Input text is double: " + scanner.nextDouble()
: scanner.hasNextBoolean() ? "The Input text is boolean: " + scanner.nextBoolean()
: "The Input text is String: " + scanner.next());
}
}
}
Nel blocco di codice sopra, viene creata un’istanza della classe Scanner
. Il costruttore chiama utilizzando una nuova parola chiave accetta un parametro Input Stream, ad esempio System.in
.
Ora inizia il lavoro effettivo sull’istanza dello scanner. Innanzitutto, nella condizione while, viene applicato un controllo per fornire una condizione di terminazione. L’espressione utilizza il metodo hasNext
della classe Scanner. Il metodo accetta un modello da abbinare al token di input. E controlla se l’input è qualcosa di diverso dal testo quit
. Il metodo hasNext
genera IllegalStateException
quando l’oggetto scanner è chiuso.
Ora, quando il blocco viene avviato, l’input viene convalidato utilizzando il metodo hasNextInt
. Restituisce vero solo se il testo inserito è il valore int
. Il testo di input viene scansionato dalla console come int
utilizzando il metodo nextInt
e stampato sulla console. Il metodo nextInt()
genera InputMismatchException
quando il testo non corrisponde a Integer Regex, IllegalStateException
quando l’istanza dello scanner è chiusa.
Ora l’intero blocco di controllo è scritto in istruzioni ternarie annidate. Se la prima condizione viene valutata come falsa, viene applicato un altro controllo. Il metodo hasNextDouble
interpreta il testo come double e restituisce true se corrisponde. Il metodo nextDouble()
restituisce un valore double dallo standard output e stampa lo stesso in console altrimenti si sposta per il controllo successivo. Il metodo nextDouble()
genera InputMismatchException
quando il token successivo dalla console non corrisponde a Float Regex, IllegalStateException
quando l’istanza dello scanner è chiusa.
Un altro controllo sta usando il metodo hasNextBoolean
. Questo metodo verifica il valore booleano
, vero o falso. Se il valore restituito è boolean true, l’uso di nextBoolean()
è fatto per prendere l’input della console e stampare lo stesso sullo schermo di output. In caso contrario, si procede con gli operatori ternari else sezione. Il metodo nextBoolean
genera InputMismatchException
quando il token successivo non trova un valore booleano, IllegalStateException
quando l’istanza dello scanner è chiusa.
Seguendo lo stesso schema, l’input viene convalidato utilizzando il metodo next
. Il metodo diventa l’ultima condizione della sezione di controllo dell’input while. Il metodo cerca e restituisce l’intero testo in avanti dalla console. La funzione può bloccare l’uscita console in attesa della scansione dell’input. Il metodo restituisce sempre un valore String. La valutazione tratta i caratteri speciali anche come stringhe e stampa nell’output. La stessa eccezione viene generata come altri metodi. Dire IllegalStateException
se lo scanner è chiuso o NoSuchElementException
quando non sono più disponibili token.
Di seguito è riportato il blocco di output per il codice di convalida di cui sopra.
Enter any text:
--
The input text is String: --
67
The input text is int: 67
1234567890000000
The input text is long: 1234567890000000
true
The input text is boolean: true
FALSE
The input text is boolean: false
90.08939782639
The input text is double: 90.08939782639
hi
The input text is String: hi
quit
Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.
LinkedIn