如何防止java.lang.NumberFormatException:对于输入字符串:“ N / A”?[关闭]


77

在运行我的代码时,我得到了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)`

如何防止发生此异常?


Answers:


91

"N/A"不是整数。NumberFormatException如果尝试将其解析为整数,则必须抛出该异常。

解析前请检查或Exception正确处理。

  1. 异常处理

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

或-整数模式匹配-

String input=...;
String pattern ="-?\\d+";
if(input.matches("-?\\d+")){ // any positive or negetive integer or not!
 ...
}

1
感谢Suresh进行编辑:)
Subhrajyoti Majumder

1
是的,您是对的,我忘记了将其分配给整数值,现在我得到了错误,是的,它已成功解决了,谢谢
codemaniac143 2013年

+1为整数模式匹配。我不确定如何使用try / catch循环从stdin读取行。
杰森·哈特利

@JasonHartley,请查看答案。我已经对其进行了编辑,并解释了为什么您不希望在代码中使用整数模式匹配。
LPVOID

如何从双引号的字符串“ 151564”中获取整数
Zeeshan Ali

7

做一个这样的异常处理程序,

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

.
.
.
.

int xTest = ConvertIntoNumeric("N/A");  //Will return 0

5

显然,你不能解析N/Aint的值。您可以执行以下操作来解决该问题NumberFormatException

   String str="N/A";
   try {
        int val=Integer.parseInt(str);
   }catch (NumberFormatException e){
       System.out.println("not a number"); 
   } 

是的,这是某种错误,谢谢您的帮助
codemaniac143 2013年

4

NumberFormatException如果字符串不包含可分析的整数,则Integer.parseInt(str)引发。您可以像下面一样使用hadle。

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

try {   
   a = Integer.parseInt(str);
} catch (NumberFormatException nfe) {
  // Handle the condition when str is not a number.
}

是的,这是某种错误,谢谢您的帮助
codemaniac143 2013年

2

“ N / A”是字符串,不能转换为数字。捕获并处理异常。例如:

    String text = "N/A";
    int intVal = 0;
    try {
        intVal = Integer.parseInt(text);
    } catch (NumberFormatException e) {
        //Log it if needed
        intVal = //default fallback value;
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.