how to read two consecutive commas from .csv file

2019-09-15 03:54发布

问题:

Suppose csv file contains

1,112,,ASIF

Following code eliminates the null value in between two consecutive commas. Code provided is more than it is required

   String p1=null, p2=null;       
    while ((lineData = Buffreadr.readLine()) != null)
        {
        row = new Vector(); int i=0;
        StringTokenizer st = new StringTokenizer(lineData, ",");

               while(st.hasMoreTokens())
               {
                row.addElement(st.nextElement());
                    if (row.get(i).toString().startsWith("\"")==true)
                    {
                        while(row.get(i).toString().endsWith("\"")==false)
                        {
                        p1= row.get(i).toString();
                        p2= st.nextElement().toString();                            
                        row.set(i,p1+", "+p2);
                        }                           
                        String CellValue= row.get(i).toString();
                        CellValue= CellValue.substring(1, CellValue.length() - 1);
                        row.set(i,CellValue);
                        //System.out.println(" Final Cell Value : "+row.get(i).toString());
                    }                       

                                            eror=row.get(i).toString();                     
                        try
                            {
                        eror=eror.replace('\'',' ');
                        eror=eror.replace('['  , ' ');
                        eror=eror.replace(']'  , ' ');
                        //System.out.println("Error "+ eror);
                        row.remove(i);
                        row.insertElementAt(eror, i);
                            } 
                        catch (Exception e) 
                            {
                            System.out.println("Error exception "+ eror); 
                            }
                        //}
                i++;
               }

how to read two consecutive commas from .csv file format as unique value in java.

回答1:

Here is an example of doing this by splitting to String array. Changed lines are marked as comments.

// Start of your code.
            row = new Vector(); int i=0;
        String[] st = lineData.split(","); // Changed
        for (String s : st) { // Changed
            row.addElement(s); // Changed
            if (row.get(i).toString().startsWith("\"") == true) {
                while (row.get(i).toString().endsWith("\"") == false) {
                    p1 = row.get(i).toString();
                    p2 = s.toString(); // Changed
                    row.set(i, p1 + ", " + p2);
                }
                ...// Rest of Code here
        }


回答2:

The StringTokenizer skpis empty tokens. This is their behavious. From the JLS

StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.

Just use String.split(",") and you are done.



回答3:

Just read the whole line into a string then do string.split(",").

The resulting array should have exactly what you are looking for...

If you need to check for "escaped" commas then you will need some regex for the query instead of a simple ",".

while ((lineData = Buffreadr.readLine()) != null) {
    String[] row = line.split(",");
    // Now process the array however you like, each cell in the csv is one entry in the array