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

Posted

技术标签:

【中文标题】如何防止 java.lang.NumberFormatException:对于输入字符串:“N/A”?【英文标题】:How can I prevent java.lang.NumberFormatException: For input string: "N/A"? 【发布时间】:2013-09-13 17:57:57 【问题描述】:

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

如何防止此异常发生?

【问题讨论】:

NumberFormatException 【参考方案1】:

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

解析前检查或正确处理Exception

    异常处理

    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 用于整数模式匹配。我不确定如何使用 try/catch 从标准输入循环读取一行。 @JasonHartley,请查看答案。我已经对其进行了编辑并解释了为什么您不喜欢在代码中使用整数模式匹配。 如何从这种类型的双引号字符串“151564”中获取整数【参考方案2】:

制作这样的异常处理程序,

private int ConvertIntoNumeric(String xVal)

 try
   
     return Integer.parseInt(xVal);
  
 catch(Exception ex) 
  
     return 0; 
  


.
.
.
.

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

【讨论】:

【参考方案3】:

Integer.parseInt(str) 抛出 NumberFormatException 如果字符串不包含可解析的整数。你可以和下面的一样。

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

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

【讨论】:

【参考方案4】:

显然您无法将 N/A 解析为 int 值。您可以执行以下操作来处理 NumberFormatException

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

【讨论】:

【参考方案5】:

“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;
    

【讨论】:

以上是关于如何防止 java.lang.NumberFormatException:对于输入字符串:“N/A”?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止超卖

在winform当中提交数据,如何防止重复提交?

PostgreSQL如何防止表太大?

如何彻底防止SQL注入?

如何防止VBS的错误提示

https如何防止会话劫持