Java:文件在行尾停止读取,并给出一个错误

Java:文件在行尾停止读取,并给出一个错误,java,Java,我正试图让IntelliJ显示数据文件中的读数,其中包含日期和加仑水 由于某种原因,当我运行它时,它给出了一个错误“For input string:“0.7”,这是我的数据文件中第一行的最后一个数据段。我不确定我是如何错误地读取它的 这是我的初始读取文件 public class WaterDataReading { private int gallons; private String date; public WaterDataReading(String lin

我正试图让IntelliJ显示数据文件中的读数,其中包含日期和加仑水

由于某种原因,当我运行它时,它给出了一个错误“For input string:“0.7”,这是我的数据文件中第一行的最后一个数据段。我不确定我是如何错误地读取它的

这是我的初始读取文件

public class WaterDataReading
{
    private int gallons;
    private String date;

    public WaterDataReading(String line)
    {
        String fields [] = line.split(",");
        date = fields[0].split(" ")[0];
        gallons = Integer.valueOf(fields[1]);
    }

    public int getGallons()
    {
        return gallons;
    }

    public String getDate()
    {
        return date;
    }
}
然后是我的阅读资料档案

public class WaterDataReadings extends ArrayList<WaterDataReading>
{
    public WaterDataReadings(String filename) throws FileNotFoundException
    {
        Scanner fIn = new Scanner(new File(filename));

        String line = "";

        while (fIn.hasNextLine())
        {
            line = fIn.nextLine();

            if (line.trim().length() == 0 || line.charAt(0) == '#')
            {
                continue;
            }
            this.add(new WaterDataReading(line));
        }
    }
}
您得到了一个NumberFormatException,因为您向一个需要整数值字符串表示的方法提供了浮点值的字符串表示形式。字符串中的点(.)把事情搞砸了

解决方案:

由于您的数据显然可以支持浮点值,因此请使用支持浮点值的数据类型,如floatdouble。请将代码中
int gallons
的任何内容更改为
double gallons

要将字符串浮点值转换为双精度数据类型(带验证),请使用:

String value = field[1];
if (value.matches("-?\\d+(\\.\\d+)?")) {
    gallons = Double.valueOf(value);
}
else {
    System.err.println("Invalid field value (" + value + ") provided for Gallons!");
    return; // or whatever...
}

您能给我们完整的错误堆栈跟踪吗?
0.7
不是整数值。
String value = field[1];
if (value.matches("-?\\d+(\\.\\d+)?")) {
    gallons = Double.valueOf(value);
}
else {
    System.err.println("Invalid field value (" + value + ") provided for Gallons!");
    return; // or whatever...
}
String value = field[1];
if (value.matches("-?\\d+(\\.\\d+)?")) {
    gallons = Double.parseDouble(value);
}
else {
    System.err.println("Invalid field value (" + value + ") provided for Gallons!");
    return; // or whatever...
}