“线程中的异常”;“主要”;java.lang.NumberFormatException:空字符串
我的程序是从txt文件中读取并打印其中的某些部分。当我试图设置Double d4时,它会给我一个错误,说字符串是 虽然不是空的。这也不是格式问题,因为当我删除行时,d1-5工作正常。我还打印了数据[5],显示了txt中的正确行“线程中的异常”;“主要”;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
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*");