NumberFormatException in Java is an important Core Java topic because it appears in real projects, debugging sessions, and interviews. Learn the meaning first, then connect it to a small working example so the rule does not stay abstract.
For this page, focus on what problem NumberFormatException in Java solves, where developers usually make mistakes, and how to verify the result. The audit note for this lesson was: under 650 content words .
A strong understanding of NumberFormatException in Java should include syntax, behavior, one realistic use case, one failure case, and one quick way to check your work with tools or output.
NumberFormatException in Java should be studied as a practical Java programming lesson, not as a label. Start by naming the input, the rule that changes the input, and the result a learner should be able to predict after reading the page.
In the core-java > errors > number-format-exception page, the notes should connect the definition with a working scenario, a mistake that beginners actually make, and the exact check that proves the fix. That makes the topic useful for coding, debugging, and interview revision.
The NumberFormatException is thrown when you try to convert a String to a numeric type (int, long, double, etc.) but the string doesn't contain a valid number. It's a subclass of IllegalArgumentException.
// ⌠Problem
int num = Integer.parseInt("abc"); // NumberFormatException!
// ✅ Solution 1: try-catch
try {
int num = Integer.parseInt(input.trim());
} catch (NumberFormatException e) {
System.out.println("Invalid number: " + input);
}
// ✅ Solution 2: Validate first
if (input.matches("-?\\d+")) {
int num = Integer.parseInt(input);
}
Scanner scanner = new Scanner(System.in);
System.out.print("Enter age: ");
String input = scanner.nextLine();
int age = Integer.parseInt(input); // Crashes if user types "twenty"!
Scanner scanner = new Scanner(System.in);
int age = -1;
while (age < 0) {
System.out.print("Enter age: ");
String input = scanner.nextLine().trim();
try {
age = Integer.parseInt(input);
if (age < 0 || age > 150) {
System.out.println("Please enter a valid age (0-150)");
age = -1;
}
} catch (NumberFormatException e) {
System.out.println("Invalid input. Please enter a number.");
}
}
System.out.println("Age: " + age);
String price = "19.99";
int p = Integer.parseInt(price); // NumberFormatException! "19.99" is not an int
String price = "19.99";
// ✅ Parse as double
double p = Double.parseDouble(price); // 19.99
// ✅ Or parse as int after truncating
int pInt = (int) Double.parseDouble(price); // 19
// ✅ Use BigDecimal for money
BigDecimal bd = new BigDecimal(price); // Exact representation
String input = " 42 "; // Has spaces!
int num = Integer.parseInt(input); // NumberFormatException!
String input = " 42 ";
int num = Integer.parseInt(input.trim()); // ✅ Always trim first!
// ✅ Reusable safe parse method
public static Optional<Integer> safeParseInt(String s) {
if (s == null || s.trim().isEmpty()) return Optional.empty();
try {
return Optional.of(Integer.parseInt(s.trim()));
} catch (NumberFormatException e) {
return Optional.empty();
}
}
// Usage
safeParseInt("42").ifPresent(n -> System.out.println("Parsed: " + n));
safeParseInt("abc").ifPresentOrElse(
n -> System.out.println(n),
() -> System.out.println("Invalid number")
);
When studying NumberFormatException in Java, separate three things: the concept, the syntax, and the situation where it is useful. This prevents the lesson from becoming a list of commands with no practical meaning.
In Core Java, NumberFormatException in Java becomes easier when you build a tiny example first, then increase complexity. Add one realistic input, one invalid or boundary input, and one explanation of why the result changes.
class NumberFormatExceptioninJavaReview {
public static void main(String[] args) {
String state = "ready";
System.out.println("NumberFormatException in Java: " + state);
}
}
String value = null;
if (value == null) {
System.out.println("NumberFormatException in Java: handle the missing value before continuing");
}
Memorizing NumberFormatException in Java without the situation where it is useful.
Connect NumberFormatException in Java to a concrete Java programming task.
Testing NumberFormatException in Java only with the perfect input.
Include empty, missing, duplicate, incompatible, or failed cases when relevant.
Changing code before reading the visible symptom or error message.
Inspect the output, state, configuration, or stack trace connected to NumberFormatException in Java.
Memorizing NumberFormatException in Java without the situation where it is useful.
Connect NumberFormatException in Java to a concrete Java programming task.
It's thrown when Integer.parseInt(), Double.parseDouble(), or similar methods receive a string that doesn't represent a valid number "" like "abc", "12.5" (for parseInt), or strings with spaces.
First parse as double, then cast: (int) Double.parseDouble("12.5") gives 12. Or use Math.round() to round: (int) Math.round(Double.parseDouble("12.5")) gives 13.
Use regex: input.matches("-?\d+") for integers, input.matches("-?\d+(\.\d+)?") for decimals. Or use try-catch which is simpler for most cases.
Integer.parseInt() returns a primitive int. Integer.valueOf() returns an Integer object (autoboxed). Both throw NumberFormatException for invalid input.
Use a try-catch loop that keeps asking until valid input is provided. Always trim() the input first. Provide clear error messages telling the user what format is expected.
Explore 500+ free tutorials across 20+ languages and frameworks.