NumberFormatException 相关的error 总结
今天出现了个数字转换异常,处理好后稍微总结了⼏个出现情景。
E/AdroidRutime:致命异常:java.lang.NumberFormatException: Invalid int: "0 "
java.lang.NumberFormatException 数字格式异常。当试图将⼀个String 转换为指定的数字类型,⽽该字符串确不满⾜数字类型要求的格式时,抛出该异常. Invalid int: "0 " 提⽰ 把 "0 " 转换成数字类型时出错了.
具体是哪个类的哪个⽅法的哪⼀⾏的错误了,看下⾯错误堆
栈,lock.TextChanged(TimerView.java:95) 在lock.TimerView 类的onTextChanged ⽅法⾥,imerView.java 的第95⾏出错了. ------原因分析--------------------
"0 "在0后⾯有空格,在字符串转换成数字时应该去除空格。
------解决⽅案--------------------如: int vale=Integer.String().trim()); // ToString()是转化为字符串的⽅法 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)。参考:ption/j2se/NumberFormatException.html
情况⼆,转换值类型没有考虑值为空的状况:
在Android 中这个序列是否正确,我打算把得到的edittext 中的值转换为整数.
startTime_hour_int=Integer.parseInt(startTime_EditableText().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_EditableText().toString());之前
判断条件:
参考:stackoverflow/questions/5973493/numberformatexceptionparse error怎么解决
情况三,由于进制不同:if(!startTime_Text().toString().equalsIgnoreCase("")) {
startTime_hour_int=Integer.parseInt(startTime_EditableText().toString());
}
题主要做⼀个进制转换.并且限定范围为 30位的数 (1073741823) 或者(0111111111111111111111111111111). 问题出现在试图转换111111111111111111111111111111的时候,出现 NumberFormatException.
此代码是检查输⼊如果是⼆进制就转换为int型数值
if (checkNumber(input)) {
try {
number = Integer.parseInt(input);
} catch (NumberFormatException ex) {
Message());
}
} else {
toDecimal();
}
这是检查 String的布尔返回值⽅法的代码.
private static boolean checkNumber(String input) {
for (char c : CharArray()) {
if (!Character.isDigit(c)) {
return false;
}
}
return true;
}
出现异常:
java.lang.NumberFormatException: For input string: "111111111111111111111111111111"
------原因分析--------------------
因为Integer.parseInt(String)默认是⼗进制.
所以需要使⽤并且指定要转换的n进制的数字的n。⽐如⼆进制是2.
-
-----解决⽅案--------------------
int value = Integer.parseInt(input, 2);
stackoverflow/questions/20722927/java-numberformatexception
持续更新。。。
如果对你有帮助,扫⼀扫我会更有动⼒,谢谢
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论