Question

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.

Was it helpful?

Solution

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
        }

OTHER TIPS

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.

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
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top