numberformatexception表示数字格式化异常,需要查看字符串里面夹杂着string或者其他类型,需要注意文本里面的内容必须是数字形式的字符串。
本教程操作环境:windows7系统、Dell G3电脑。
今天出现了个数字转换异常,处理好后稍微总结了几个出现情景。
E/AdroidRutime:致命异常:java.lang.NumberFormatException: Invalid int: "0 "
java.lang.NumberFormatException 数字格式异常。当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常.
Invalid int: "0 " 提示 把 "0 " 转换成数字类型时出错了.
具体是哪个类的哪个方法的哪一行的错误了,看下面错误堆栈,at com.example.myclock.TimerView$5.onTextChanged(TimerView.java:95) 在com.example.myclock.TimerView 类的onTextChanged方法里,imerView.java的第95行出错了
. ------原因分析--------------------
"0 "在0后面有空格,在字符串转换成数字时应该去除空格。
------解决方案--------------------
如: int vale=Integer.parseInt(s.toString().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)。
参考:http://www.myexception.cn/j2se/NumberFormatException.html
情况二,转换值类型没有考虑值为空的状况:
在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());之前
判断条件:
情况三,由于进制不同:
题主要做一个进制转换.并且限定范围为 30位的数 (1073741823) 或者(0111111111111111111111111111111). 问题出现在试图转换 111111111111111111111111111111的时候,出现 NumberFormatException.
此代码是检查输入如果是二进制就转换为int型数值
这是检查 String的布尔返回值方法的代码.
出现异常:
------原因分析--------------------
因为 Integer.parseInt(String) 默认是十进制.
所以需要使用 Integer.parseInt(String, int) 并且指定要转换的n进制的数字的n。比如二进制是2.
------解决方案--------------------
为什么需要自定义异常类:
我们说了Java中的异常类,分别表示着某一种具体的异常情况,那么在开发中总是有些异常情况是SUN没有定义好的,此时我们根据自己的异常情况来定义异常类.
什么是自定义异常类:
在开发中根据自己的业务逻辑异常情况来定义异常类.
自定义一个业务逻辑异常.
异常类如何自定义:
方式1:自定义一个受检查的异常类:自定义类 并继承与java.lang.Exception.
方式2:自定义一个运行时期的异常类:自定义类,并继承于java.lang.RuntimeException.(可处理可不 处理)
示例代码:
异常类
package com.java520.exceptiondemo;
public class LogicException extends RuntimeException {
/**
*
*/
private static final long serialVersionUID = 1L;
public LogicException() {
super();
// TODO Auto-generated constructor stub
}
public LogicException(String message, Throwable cause) {
super(message, cause);
// TODO Auto-generated constructor stub
}
public LogicException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
}
调用类:
package com.java520.exceptiondemo;
public class LogicExceptionDemo {
static String[] names = new String[]{"will","lucy","jack"};
public static void main(String[] args) {
try {
test("jack");
} catch (LogicException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println(e.getMessage());
}
System.out.println("结束");
}
private static void test(String userName) throws LogicException {
// TODO Auto-generated method stub
for (String name : names) {
if(name.equals(userName)){
throw new LogicException("该ID已经被注册");
}
}
}
}
关键词: numberformatexception numberformatexception是什么异常 java异常分类 java异常分类三大类