"java.lang.NumberFormatException: empty String" с непустой строкой - PullRequest
0 голосов
/ 09 апреля 2019

В настоящее время я работаю над личным проектом за пределами класса и сталкиваюсь с некоторыми проблемами при чтении текстового файла в связанный список.При чтении в первом дубле я получаю ошибку

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

1 Ответ

0 голосов
/ 09 апреля 2019

Ваш текстовый файл, вероятно, содержит пустые строки.Вы можете удалить новые строки в текстовом файле, изменить способ создания текстового файла или просто пропустить пустые строки, когда вы читаете его.

Вот как вы пропускаете пустые строки:

while (sc.hasNextLine()) {

        String temp = sc.nextLine();

        if (temp.equals("")) { continue; } // <--- notice this line
        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]);

    }
}
...