Articolo originale: https://www.freecodecamp.org/news/java-string-to-int-how-to-convert-a-string-to-an-integer/

Gli oggetti stringa sono rappresentati come stringhe di caratteri.

Se hai lavorato in Java Swing, sai che ha componenti come JTextField e JTextArea che usiamo per ottenere i nostri input dall'interfaccia grafica. Inoltre, prende il nostro input come una stringa.

Se vogliamo fare una semplice calcolatrice usando Swing, dobbiamo scoprire come convertire una stringa in un numero intero. Questo ci porta alla domanda, come facciamo a convertire una stringa in un numero intero?

In Java, possiamo usare Integer.valueOf() e Integer.parseInt() per convertire una stringa in un numero intero.

1. Usare Integer.parseInt() per convertire una stringa in un numero intero

Questo metodo restituisce la stringa come un tipo primitivo int. Se la stringa non contiene un numero intero valido allora dà una eccezione NumberFormatException.

Quindi, ogni volta che convertiamo una stringa in un numero intero, dobbiamo gestire questa eccezione mettendo il codice dentro un blocco try-catch.

Consideriamo un esempio di conversione da una stringa ad un numero intero usando Integer.parseInt():

        String str = "25";
        try{
            int number = Integer.parseInt(str);
            System.out.println(number); // output = 25
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }

Cerchiamo di rompere questo codice scrivendo un numero intero non valido:

     	String str = "25T";
        try{
            int number = Integer.parseInt(str);
            System.out.println(number);
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }

Come puoi vedere nel codice sopra, abbiamo provato a convertire 25T in un numero intero. Questo non è un input valido, quindi dà un errore NumberFormatException.

Ecco l'output del codice sopra:

java.lang.NumberFormatException: For input string: "25T"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.parseInt(Integer.java:615)
	at OOP.StringTest.main(StringTest.java:51)

Come passo successivo, consideriamo come convertire una stringa in un numero intero, usando il metodo Integer.valueOf() method.

2. Usare Integer.valueOf() per convertire una stringa in un numero intero

Questo metodo restituisce la stringa come oggetto numero intero. Se guardi sulla documentazione di Java, Integer.valueOf() restituisce un oggetto numero intero che è equivalente a new Integer(Integer.parseInt(s)).

Metteremo il nostro codice in un blocco try-catch quando usiamo questo metodo. Consideriamo un esempio usando il metodo Integer.valueOf():

        String str = "25";
        try{
            Integer number = Integer.valueOf(str);
            System.out.println(number); // output = 25
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }

Ora, proviamo a romperlo inserendo un numero intero non valido:

        String str = "25TA";
        try{
            Integer number = Integer.valueOf(str);
            System.out.println(number); 
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }

Come l'esempio precedente, il codice sopra darà un errore.

Ecco l'output del codice sopra:

java.lang.NumberFormatException: For input string: "25TA"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.valueOf(Integer.java:766)
	at OOP.StringTest.main(StringTest.java:42)

Prima di usare il metodo sopra menzionato, possiamo anche creare un metodo per controllare se la stringa input è numerica o meno.

Ho creato un semplice metodo per controllare se la stringa inserita è numerica o no:

public class StringTest {
    public static void main(String[] args) {
        String str = "25";
        String str1 = "25.06";
        System.out.println(isNumeric(str));
        System.out.println(isNumeric(str1));
    }

    private static boolean isNumeric(String str){
        return str != null && str.matches("[0-9.]+");
    }
}

L'output è:

true
true

Il metodo isNumeric() prende una stringa come argomento. Prima controlla se è null o meno. Poi usa il metodo matches() per vedere se contiene le cifre da 0 a 9 e il carattere punto.

Questo è un semplice modo per controllare se è un valore numerico. Puoi scrivere tu stesso o cercare su Google espressioni regolari più complesse a seconda del tuo caso di utilizzo.

È buona pratica controllare se la stringa input è numerica o no prima di provare a trasformarla in un numero intero.

Grazie per aver letto quest'articolo.

Immagine di 🇸🇮 Janko Ferlič su Unsplash

Buona programmazione!