How can I prevent java.lang.NumberFormatException: For input string: "N/A"?
Asked Answered
L

6

101

While running my code I am getting a NumberFormatException:

java.lang.NumberFormatException: For input string: "N/A"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.valueOf(Unknown Source)
    at java.util.TreeMap.compare(Unknown Source)
    at java.util.TreeMap.put(Unknown Source)
    at java.util.TreeSet.add(Unknown Source)`

How can I prevent this exception from occurring?

Lorica answered 10/9, 2013 at 6:17 Comment(1)
NumberFormatExceptionMarrero
G
119

"N/A" is not an integer. It must throw NumberFormatException if you try to parse it to an integer.

Check before parsing or handle Exception properly.

  1. Exception Handling

    try{
        int i = Integer.parseInt(input);
    } catch(NumberFormatException ex){ // handle your exception
        ...
    }
    

or - Integer pattern matching -

String input=...;
String pattern ="-?\\d+";
if(input.matches("-?\\d+")){ // any positive or negetive integer or not!
 ...
}
Garbe answered 10/9, 2013 at 6:19 Comment(4)
yes you are right I forgot to assign it to integer value now i got the error and yes it is resolved successfully thank youLorica
+1 for the integer pattern matching. I wasn't sure how to do a loop reading a line from stdin using a try/catch.Sealed
@JasonHartley, please review the answer. I have edited it and explained why you would not prefer to use integer pattern matching in your code.Shantelleshantha
How to get integer from this type of string "151564" in double quotesOilstone
F
10

Integer.parseInt(str) throws NumberFormatException if the string does not contain a parsable integer. You can hadle the same as below.

int a;
String str = "N/A";

try {   
   a = Integer.parseInt(str);
} catch (NumberFormatException nfe) {
  // Handle the condition when str is not a number.
}
Flowerer answered 10/9, 2013 at 6:23 Comment(0)
T
9

Make an exception handler like this,

private int ConvertIntoNumeric(String xVal)
{
 try
  { 
     return Integer.parseInt(xVal);
  }
 catch(Exception ex) 
  {
     return 0; 
  }
}

.
.
.
.

int xTest = ConvertIntoNumeric("N/A");  //Will return 0
Telophase answered 10/9, 2013 at 6:25 Comment(0)
A
7

Obviously you can't parse N/A to int value. you can do something like following to handle that NumberFormatException .

   String str="N/A";
   try {
        int val=Integer.parseInt(str);
   }catch (NumberFormatException e){
       System.out.println("not a number"); 
   } 
Armored answered 10/9, 2013 at 6:22 Comment(0)
U
6

"N/A" is a string and cannot be converted to a number. Catch the exception and handle it. For example:

    String text = "N/A";
    int intVal = 0;
    try {
        intVal = Integer.parseInt(text);
    } catch (NumberFormatException e) {
        //Log it if needed
        intVal = //default fallback value;
    }
Unguiculate answered 10/9, 2013 at 6:21 Comment(0)
M
2

'N/A' cannot be parsed to int and we get the exception and there might a case where the provided string could be <-2147483648 or > 2147483648 (int max and min) and in such case too we get number format exception and in such case we can try as below.

String str= "8765432198";
Long num= Long.valueOf(str);
int min = Integer.MIN_VALUE;
int max = Integer.MAX_VALUE;
Integer n=0;
if (num > max) {
        n = max;
    }
if (num < min) {
        n = min;
    }
if (num <= max && num >= min)
  n = Integer.valueOf(str);
Murton answered 13/4, 2022 at 7:43 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.