“线程中的异常”;“主要”;java.lang.NumberFormatException:空字符串

“线程中的异常”;“主要”;java.lang.NumberFormatException:空字符串,java,exception,Java,Exception,我的程序是从txt文件中读取并打印其中的某些部分。当我试图设置Double d4时,它会给我一个错误,说字符串是 虽然不是空的。这也不是格式问题,因为当我删除行时,d1-5工作正常。我还打印了数据[5],显示了txt中的正确行 import java.util.Scanner; import java.io.*; import java.text.DecimalFormat; import java.util.ArrayList; public class AAAAAA { publ

我的程序是从txt文件中读取并打印其中的某些部分。当我试图设置Double d4时,它会给我一个错误,说字符串是 虽然不是空的。这也不是格式问题,因为当我删除行时,d1-5工作正常。我还打印了数据[5],显示了txt中的正确行

import java.util.Scanner;
import java.io.*;
import java.text.DecimalFormat;
import java.util.ArrayList;


public class AAAAAA {
    public static void main (String[] args)throws IOException {

    final String fileName = "classQuizzes.txt";
//1)
    Scanner sc = new Scanner(new File(fileName));

    //declarations 
    String input;
    double total = 0.0;
    double num = 0;
    double count = 0;
    double average = 0;
    String lastName;
    String firstName;
    double minimum;
    double max;


//2) process rows   
    input = sc.nextLine();
    System.out.println(input); 
    while (sc.hasNextLine()) {

       String line = sc.nextLine();
       System.out.println(line);

    // split the line into pieces of data separated by the spaces
       String[] data = line.split(" ");

    // get the name from data[]
       System.out.println("d5 " +data[4]);
       firstName = data[0];
       lastName = data[1];
       Double d1 = Double.valueOf(data[2]);
       Double d2 = Double.valueOf(data[3]);
       Double d3 = Double.valueOf(data[4]);
       Double d4 = Double.valueOf(data[5]);
       Double d5 = Double.valueOf(data[6]);


    // do the same...
    System.out.println("data " + d3);
         total += d1 + d2 + d3  + d5;
         count++;

   //find average (decimal 2 points)
               System.out.println(count);
               average = total / count;
               System.out.println("Total = " + total);
               System.out.println("Average = " + average);

//3) class statistics




    //while
       }       
         System.out.println("Program created by");
     }
}

该行可能不是空的,但当您在空格处拆分它时,如果一行中有两个空格,则在拆分中会得到空字符串。要防止这种情况,就要改变

String[] data = line.split(" ");

或者,也许更好,因为它将处理选项卡和其他空白:

String[] data = line.split("\\s*");

要自己追踪这类问题(并验证我是否正确诊断了问题),您应该打印分割数组的每个元素,以及验证数组长度是否符合您的预期。

当我尝试设置双d4时,会出现一个错误,指出字符串为空,尽管它不是空的-如果字符串不是空的,为什么JRE要告诉您字符串为空?你怎么知道不是?你试过调试你的程序吗?是的,我在设置它之前放了一个打印行,它显示了期望的值,而不是描述异常,请将你的问题包括stacktrace的全文。@Stuwu如果你没有。您打印的是
数据[4]
,而不是
数据[5]
,很清楚,没有人会相信您的话而不是JVM。我们可以尝试向您指出您的错误,但前提是您提供了所有必要的信息,以使场景清晰且可复制,即a。
String[] data = line.split("\\s*");