-1

I want to read a text file containing a sequence of number as below:

1.000000  1:-0.362772 2:-0.314085 3:-0.177185 4:0.898650 5:-0.154588

Currently, I'm reading the line and I use split() method to split the number and store the numbers into an array. There are 3 variables will be used to store array elements, output,number, and value. 1.000000 will be the output as an integer, [1, 2, 3, 4, 5] will be an array of numbers, and [-0.362772,-0.314085,-0.177185,0.898650,-0.154588] will be the array of values.

Here is my code:

while (line != null) {
        double output = 0;
        inputs = new double[6];
        String[] inputPairs = line.split(" ");
        output = Double.parseDouble(inputPairs[0]);
        for (int i = 1; i < inputPairs.length; i++) {
            int components = Integer.parseInt(inputPairs[i].split(":")[0]);
            double data = Double.parseDouble(inputPairs[i].split(":")[1]);
            inputs[components] = data;
        }
        outputs[counter] = (int) output;
        input[counter] = inputs;
        counter++;
        line = br.readLine();
    }

However, when I execute the code I got this exception:

Exception in thread "main" java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:592) at java.lang.Integer.parseInt(Integer.java:615) at testReadFile.main(testReadFile.java:32).

I noticed that there is an extra space after the first index: 1.000000 1:-0.362772 being stored in the 2nd element of the array.

How do I remove the space? I have used trim() but it doesn't work. Or is there a way to remove the array[2] which contains the space?

Kim Gary
  • 35
  • 6
  • @soorapadman I'm looking for a way to remove the space without it being added to the array. Not throwing an exception. – Kim Gary Mar 19 '18 at 08:34

2 Answers2

0

String split method accepts regex, so you can do this to split by multiple spaces

String[] inputPairs = line.split(" +");
Thum Choon Tat
  • 3,084
  • 1
  • 22
  • 24
0

Do this

while (line != null) {
    if (line.trim().isEmpty()) {
        continue;
    }
    double output = 0;
    inputs = new double[6];
    String[] inputPairs = line.split(" ");
    output = Double.parseDouble(inputPairs[0]);
    for (int i = 1; i < inputPairs.length; i++) {
        int components = Integer.parseInt(inputPairs[i].split(":")[0]);
        double data = Double.parseDouble(inputPairs[i].split(":")[1]);
        inputs[components] = data;
    }
    outputs[counter] = (int) output;
    input[counter] = inputs;
    counter++;
    line = br.readLine();
}
Impulse The Fox
  • 2,638
  • 2
  • 27
  • 52