【问题标题】:Want to know reason behind NumberFormat Exception in my code想知道我的代码中 NumberFormat Exception 背后的原因
【发布时间】:2017-04-29 15:20:02
【问题描述】:

我正在尝试使用 BufferedReader 读取文件,并且在拆分文件的每一行时,我想将第 8 位的字符串数据转换为浮点数。(计数从 0 数据开始)

下面是我的代码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class TestFloat {
    static BufferedReader bin;
    String line;
    void sumAmount() throws IOException //Perform calculation
    {

        bin =  new BufferedReader(new FileReader("D:\\Extras\\file.txt"));
        //String firstline = bin.readLine();
        while ((line = bin.readLine()) != null) 
        {
            String data[] = line.split(",");
            //System.out.println(data[8]);
            System.out.println(Float.valueOf(data[8]));
            //System.out.println(java.lang.Float.parseFloat(data[8]))
        }
    }
    public static void main(String[] args) 
    {
    TestFloat ts = new TestFloat();
    try {
        ts.sumAmount();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    }

}

对于这段代码,我得到如下异常:

Exception in thread "main" java.lang.NumberFormatException: empty String
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
    at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
    at java.lang.Float.parseFloat(Float.java:451)
    at java.lang.Float.valueOf(Float.java:416)
    at TestFloat.sumAmount(TestFloat.java:17)
    at TestFloat.main(TestFloat.java:24)

file.txt 的一个示例行是:

20,20160518,262,20160518,00,F&O ABC DEBIT F 160518,000405107289,000405006220,5000000.00,5000000.00,0.00,, 

我已尝试使用 parseFloat 和 valueOf 这两个函数,但它显示异常。失败的原因是什么?

【问题讨论】:

  • 来这里之前调试一下。在您尝试解析之前打印出该字符串令牌包含的内容。
  • 在将值解析为数字格式之前,您应该检查它是否为空,并检查它的长度是否应大于 0。在您的 txt 文件中的某行中,第 8 位可能有空白值,这导致了异常。
  • 不是每次学生。您正在使用 while 循环,并且在该循环中至少有一次,它没有。您需要进一步调试。
  • 再一次,取消对 println 的注释,看看他们怎么说。更改它们以便它们始终打印一些内容:System.out.println("data[8]: " + data[8]);,您将看到最后一次 while 循环循环时,您得到一个空字符串。然后做进一步的调试看看为什么。

标签: java numberformatexception parsefloat value-of


【解决方案1】:

java.lang.NumberFormatException: 空字符串

错误表明您正在尝试解析一个空的string

一种解决方案是使用if 语句来保护NumberFormatException( 为空strings,也就是说,您仍然可以获得NumberFormatException 用于无法解析的strings )。

if(data[8] != null && data[8].length() > 0){
     System.out.println(Float.valueOf(data[8]));
     System.out.println(java.lang.Float.parseFloat(data[8]));
}

您需要逐步检查调试器,看看它背后的真正问题是什么。

【讨论】:

  • 很高兴它帮助了^^。
猜你喜欢
  • 2021-03-11
  • 2021-07-06
  • 2022-11-01
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
相关资源
最近更新 更多