Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Read streamfile in java

I am working on comma separated value file.i want to extract first position["0" place in array] value from each raw and want to some math calculation on it.

csv inputfile is like this
a,b,c,d
12,32,45,76
23,45,77,56
32,34,49,28
73,92,26,68
73,36,77,26

for getting first position it give me error like this

Exception in thread "main" java.lang.NumberFormatException: For input string: ""12"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1268)

at java.lang.Double.parseDouble(Double.java:548)
    at rotation.pkg45.Rotation45.main(Rotation45.java:49)//code line no-49

it work fine for second and third position but for the fourth it give the same error as first.

 package rotation.pkg45;import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.io.FileWriter;
import java.io.*;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.ListIterator;
public class Rotation45 {
 public static void main(String[] args)throws IOException {
        String filename = "bank-full2.csv";
        ArrayList<String> namesList = new ArrayList<String>( );
        String[] t1;
       // StringBuilder sb;
        List<Double> list = new ArrayList<Double>();
        File file = new File(filename);
        BufferedWriter writer = null;

        try {
            writer = new BufferedWriter(new FileWriter("bank2test1.csv"));     
               double a1=0.866025;
        double a2=0.5;
        double a3=-0.5;
        double a4=0.866025;
        double b1;
        double b2;
        double c1;
        double c2;          

            Scanner inputStream = new Scanner(file);
            inputStream.next();  
             Scanner inputStreamm = new Scanner(file);
            inputStreamm.next();          

         while (inputStreamm.hasNext()) {   //while loop for find MEAN
            String data = inputStreamm.next();   //read each line and store in data
            String[] values = data.split(",");  //every line splited with " ; " and store each attribute in string list 

            double first = Double.parseDouble(values[1]); 


          /* no suchelementexeption  */  String data1 = inputStreamm.next();   //read each line and store in data
            String[] values1 = data1.split(",");  
            //inputStream.next();          
            double second = Double.parseDouble(values1[1]); 

            c1= ((a2*second)+(a1*first));
    c2= ((a3*first)+(a4*second));
       values1[2] = String.valueOf(c2);
        values[2] = String.valueOf(c1);
       StringBuilder sb = new StringBuilder();
            //  String newData = sb.toString();
            for (int i = 0; i<values.length ; i++) {
                    sb.append(values[i]);
                    if (i < values.length - 1) {
                    sb.append(",");
                }
                    }
             sb.append("\n");
              for (int i = 0; i<values1.length ; i++) {
                    sb.append(values1[i]);
                    if (i < values.length - 1) {
                    sb.append(",");
                }
                    }
            // get the new string
           // System.out.println(sb.toString());

            writer.write(sb.toString()+"\n");
                }
            writer.close();

            inputStreamm.close();


            }
        catch (FileNotFoundException ex)
              {
            Logger.getLogger(Rotation45.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
}              

here just for example i had extracted values[1](means second position in array like 32,45,34,..)

so result will be..
12,34,45,76
23,46,77,56
32,36,49,28
73,93,26,68
73,38,77,26

this codeis works for values[1]and value[2] not in values[0]and value[3]..why i cant understand pls help me...

like image 749
vivek patel Avatar asked Jan 31 '26 09:01

vivek patel


1 Answers

When you read the line, it apparently returns with surrounding quotation marks, as such:

"12,32,45,76"

So when you split it, you get the following elements:

"12
32
45
76"

As you can see the first and last elements in the row are not numbers and therefore your Double.ParseDouble(..) call fails.

You should either modify the original string (by either substringing it or more preferably using .reaplce("\"", "")) or check each element after the split and then replace / trim the quotation mark.

like image 180
Ori Lentz Avatar answered Feb 01 '26 21:02

Ori Lentz



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!