您现在的位置: 365建站网 > 365学习 > java.lang.NumberFormatException 错误及解决办法

java.lang.NumberFormatException 错误及解决办法

文章来源:365jz.com     点击数:1322    更新时间:2018-05-26 21:42   参与评论

package com.geelou.test;

public class ErrTest {
    public static void main(String[] args) {
       String numString = "1 ";
       System.out.println(Integer.parseInt(numString));

   }

}


   错误提示信息如下:

Exception in thread "main" Java.lang.NumberFormatException: For input string: "1 "
 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
 
    at java.lang.Integer.parseInt(Integer.java:458)
 
    at java.lang.Integer.parseInt(Integer.java:499)
 
    at com.geelou.test.ErrTest.main(ErrTest.java:6)


  错误关键字 java.lang.NumberFormatException 这句话明确告诉了我们是数字格式异常,接着后面有 For input string: "1 " 提示,这就告诉我们你当前想把 "1 " 转换成数字类型时出错了,这样就很确切了。

    具体是哪个类的哪个方法的哪一行的错误了,看下面错误堆栈,找自己写的第一个类com.geelou.test.ErrTest.main(ErrTest.java:6) 原来是  com.geelou.test.ErrTest 类的main方法里的第6行出错了。

    这样就定位到了System.out.println(Integer.parseInt(numString));具体是 Integer.parseInt(numString) 时出的错,知道了错误地方就可以相应的解决了

    解决办法很简单,改成 Integer.parseInt(numString.trim()) 就可以啦

其他抛出NumberFormatException情况:
 
情况一,超出转换数值类型范围:
用Integer.parseInt()转换字符时抛出NumberFormatException异常,把字符改短一点又没事
String   line3[1]= "8613719716 "; 
  int   int1=java.lang.Integer.parseInt(line3[1]); 


以上是程序中的一小段,但是在运行的过程中总是抛出异常 
Exception   in   thread   "main "   java.lang.NumberFormatException:   For   input   string:   "8613719716 " 
------原因分析--------------------
int类型存储范围是-2,147,483,648 --2,147,483,647。用System.out.println(Integer.MAX_VALUE);输出的是2147483647。而你的 String line3[1]= "8613719716 ";超过了这个最大的值。
------解决方案--------------------
8613719716 根本无法直接使用int表示的,只能用long ,如果更大了就得用到BigInteger 。Long.parseLong(String)
 
情况二,转换值类型没有考虑值为空的状况:

在Android中这个序列是否正确,我打算把得到的edittext中的值转换为整数.

startTime_hour_int=Integer.parseInt(startTime_hour_edittext.getEditableText().toString());

 logcat 出现了如下错误05-12 10:26:35.536: ERROR/AndroidRuntime(293): java.lang.NumberFormatException: unable to parse '' as integer

.------原因分析--------------------
如果textbox startTime_hour_edittext 为空, Integer.parseInt就会试图把 "" 转换成 integer。这就是NumberFormatException出现的原因。所以在转换为int类型前需要判断textbox startTime_hour_edittext中是否为空。
------解决方案--------------------

在使用 startTime_hour_int=Integer.parseInt(startTime_hour_edittext.getEditableText().toString());之前

判断条件:

if(!startTime_hour_edittext.getText().toString().equalsIgnoreCase("")) {
startTime_hour_int=Integer.parseInt(startTime_hour_edittext.getEditableText().toString());
}
情况三,由于进制不同:

题主要做一个进制转换.并且限定范围为 30位的数 (1073741823) 或者(0111111111111111111111111111111). 问题出现在试图转换 111111111111111111111111111111的时候,出现 NumberFormatException. 

此代码是检查输入如果是二进制就转换为int型数值

if (checkNumber(input)) {
        try {
        number = Integer.parseInt(input);
        } catch (NumberFormatException ex) {
            log(ex.getMessage());
        }
    } else {
        toDecimal();
    }

这是检查 String的布尔返回值方法的代码.

private static boolean checkNumber(String input) {
    for (char c : input.toCharArray()) {
        if (!Character.isDigit(c)) {
            return false;
        }
    }

    return true;
}

出现异常:

java.lang.NumberFormatException: For input string: "111111111111111111111111111111"
------原因分析--------------------

因为 Integer.parseInt(String) 默认是十进制.

所以需要使用 Integer.parseInt(String, int) 并且指定要转换的n进制的数字的n。比如二进制是2.

------解决方案--------------------
int value = Integer.parseInt(input, 2);
 

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛


发表评论 (1322人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换图片
最新评论
------分隔线----------------------------