Ce face NumberFormatException
Integer.parseInt, Long.parseLong, Double.parseDouble, new BigDecimal(text) și metodele valueOf aruncă NumberFormatException dacă textul nu este un număr valid. Mesajul arată textul primit: For input string: "12a".
Cauze frecvente: spații la început sau sfârșit (" 42"), virgula zecimală românească ("3,14"; Java așteaptă punct), text gol, numere prea mari pentru tip ("3000000000" la int).
Este o subclasă a IllegalArgumentException, deci neverificată. Pentru date introduse de utilizator, prinde-o și afișează un mesaj prietenos.
Ce returnează
Excepția este aruncată de metoda de conversie.
Exemple
Exemplul 1: Texte care nu sunt numere
public class Main {
public static void main(String[] args) {
String[] intrari = {"42", " 42", "12a", "3,14", "", "3000000000"};
for (String s : intrari) {
try {
System.out.println("\"" + s + "\" -> " + Integer.parseInt(s));
} catch (NumberFormatException e) {
System.out.println("\"" + s + "\" -> eroare: " + e.getMessage());
}
}
}
}
Rezultat
"42" -> 42
" 42" -> eroare: For input string: " 42"
"12a" -> eroare: For input string: "12a"
"3,14" -> eroare: For input string: "3,14"
"" -> eroare: For input string: ""
"3000000000" -> eroare: For input string: "3000000000"
Exemplul 2: Citire prietenoasă de la tastatură
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextLine()) {
String linie = in.nextLine().strip();
try {
double pret = Double.parseDouble(linie.replace(',', '.'));
System.out.println("Preț acceptat: " + pret + " lei");
break;
} catch (NumberFormatException e) {
System.out.println("\"" + linie + "\" nu este un preț. Încearcă din nou.");
}
}
}
}
Ce scrie utilizatorul (intrare)
doisprezece
12,50
Rezultat
"doisprezece" nu este un preț. Încearcă din nou.
Preț acceptat: 12.5 lei
Greșeli frecvente
- Nu apelezi
strip()înainte deparseInt. Un spațiu sau un\nla final aruncă excepția. - Te aștepți ca
Double.parseDouble("3,14")să meargă. Java folosește punctul; înlocuiește virgula sau foloseșteNumberFormatcuLocaleromânesc.
Comenzi înrudite
IllegalArgumentException: Excepția aruncată când o metodă primește un argument cu valoare nepermisă (vârstă negativă, lună 13).Integer.parseInt: Transformă un text ca „42” în numărul întreg 42; valueOf face același lucru, dar returnează un obiect Integer.Exception: Clasa de bază pentru erorile pe care un program le poate trata; getMessage() returnează mesajul dat la creare.