В настоящее время я работаю над личным проектом за пределами класса и сталкиваюсь с некоторыми проблемами при чтении текстового файла в связанный список.При чтении в первом дубле я получаю ошибку
java.lang.NumberFormatException: empty String
.Я добавил в программу строку печати, чтобы распечатать то, что я пытаюсь разобрать в двойное число, а переменная фактически не пустая, а фактически двойная.
Как я уже говорил выше, я добавилстроку печати, чтобы распечатать строку, которую я пытаюсь разобрать в двойную, и, кажется, все в порядке.Вот строка, которая считывается и разбивается на массив, из которого я печатаю:
500.0 % 04/05/2019 % This is paycheck 1 % true % 49.5
Мне нужно разобрать две строки в двойные, и у меня возникают проблемы только с первой.Когда я закомментирую первый анализируемый дубль, программа запускается без проблем.Вот полный вывод от запуска к программе
*File loading*
*500.0*
*Exception in thread "main" java.lang.NumberFormatException: empty String*
*at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)*
*at sun.misc.FloatingDecimal.parseDouble(Unknown Source)*
*at java.lang.Double.parseDouble(Unknown Source)*
*at fileHandling.readPaycheck(fileHandling.java:194)*
*at UserMenu.main(UserMenu.java:20)*
Проблемы возникают в разделе «Разделение массива на соответствующие временные переменные» в этой строке кода:
payCheckAmount = Double.parseDouble(tempArray[0]);
Здесьэто код метода, который находится в
public void readPaycheck(LinkedList<PayCheck> paycheck) throws IOException {
// Declare Variables
Scanner sc = new Scanner(payChecks); // Scanner used to read in from the payChecks text file
String temp; // A string used to hold the data read in from the file temporarily
String[] tempArray; // A String array used to temporarily hold data from the text file
double payCheckAmount; // A double holding the amount of the paycheck
String paycheckDate; // A string holding the date of the paycheck
String description; // A string holding a description of the paycheck
boolean payCheckSplit; // A boolean stating if the paycheck has been split or not
double amountUnSplit; // A double
// A while loop that runs while the text file still has data in it
while (sc.hasNextLine()) {
// Reading in a new line from the paycheck file
temp = sc.nextLine();
// Splitting the line into an array
tempArray = temp.split(" % ");
// Temp output used for testing of the issue at hand
System.out.println(tempArray[0]);
// Splitting the array into its appropriate temp variables
payCheckAmount = Double.parseDouble(tempArray[0]);
paycheckDate = tempArray[1];
description = tempArray[2];
payCheckSplit = Boolean.parseBoolean(tempArray[3]);
amountUnSplit = Double.parseDouble(tempArray[4]);
// putting the temp variables into a temp paycheck object
PayCheck tempCheck = new PayCheck(payCheckAmount, paycheckDate, description, payCheckSplit, amountUnSplit);
paycheck.add(tempCheck);
}
}
Редактировать:
Вот минимальный, полный и проверяемый пример проблемы, с которой я сталкиваюсь:
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class test {
public static void main(String[] args) throws IOException {
// Declare Variables
File payChecks = new File("C:\\Users\\zwtw\\Documents\\paychecks.txt");
Scanner sc = new Scanner(payChecks);
while (sc.hasNextLine()) {
String temp = sc.nextLine();
String[] tempArray = temp.split(" % ");
System.out.println(tempArray[0]);
// Splitting the array into its appropriate temp variables
double payCheckAmount = Double.parseDouble(tempArray[0]);
String paycheckDate = tempArray[1];
String description = tempArray[2];
boolean payCheckSplit = Boolean.parseBoolean(tempArray[3]);
double amountUnSplit = Double.parseDouble(tempArray[4]);
}
}
}
Вот содержимое текстового файла, упомянутого в коде выше:
500.0 % 04/05/2019 % This is paycheck 1 % true % 49.5
450.0 % 04/09/2019 % This is paycheck 2 % true % 49.75