这种问题我遇到过两次不同的,一种是 String 转换为 int 型报错,另一种是 String 转换为 double 报错,其实是同一类型的错误,只是我运用的不同场景,忽略了本质。

第一种、错误提示信息如下:

Exception in thread "main" java.lang.NumberFormatException: For input string: "1 "
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.parseInt(Integer.java:615)
	at com.xnch.chaptor1.StringFormat.main(StringFormat.java:8)

下面是我模拟的一段代码:

	public static void main(String[] args) {
		String str = "1 ";
		int result = Integer.parseInt(str);
		System.out.println("结果为:" + result);
			
	}
  1. 错误分析:错误关键字 NumberFormatException 这句话明确告诉了我们是数字格式异常,接着后面有 For input string: "1 " 提示,这就说明想把String类型的 "1 " 转换成数字类型时出错了。

  2. 找到问题点:具体是哪个类的哪个方法的哪一行的错误了,看下面错误堆栈,找到错误的行数,这样就定位到了int result = Integer.parseInt(str);具体是 Integer.parseInt(numString) 时出的错,

  3. 解决问题:这里比较明显是“1 ” 后面有个空格,解决办法很简单,改成 Integer.parseInt(numString.trim()) 就可以了。

第二种、错误提示信息如下:

Exception in thread "main" java.lang.NumberFormatException: For input string: "Unrated"
	at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
	at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
	at java.lang.Double.parseDouble(Double.java:538)
	at com.xnch.chaptor1.StringFormat.main(StringFormat.java:9)
  1. 错误分析:错误关键字 NumberFormatException 这句话明确告诉了我们是数字格式异常,接着后面有 For input string: "Unrated " 提示,这就说明想把String类型的 “Unrated” 转换成数字类型时出错了,很明显这是将字符串转换为浮点型或者整型出错,谁都不会这么笨,直接将字符串拿来转换。
    在这里插入图片描述
    出现这个问题是因为我在拉取文件里面的数据,自然而然的以为那一列数据都是double类型的,没想到还有脏数据,没有及时清理,小伙伴们后面在做数据分析之类的一定要记得先清理数据,避免踩坑。
  2. 解决问题:清理掉字符串数据即可。
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐