如何从.csv文件格式中读取两个连续逗号作为java中的唯一值

时间:2013-12-12 12:01:59

标签: java csv stringtokenizer opencsv

假设csv文件包含

1,112,,ASIF

以下代码消除了两个连续逗号之间的空值。 提供的代码超出了要求

   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++;
               }

如何从.csv文件格式中读取两个连续逗号作为java中的唯一值。

3 个答案:

答案 0 :(得分:0)

只需将整行读成字符串,然后执行string.split(",")

结果数组应该具有您正在寻找的内容......

如果你需要检查“转义”逗号,那么你需要一些正则表达式来代替简单的“,”。

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

答案 1 :(得分:0)

StringTokenizer skpis空标记。这是他们的行为。来自JLS

  

StringTokenizer是一个遗留类,出于兼容性原因而保留,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人都使用String的split方法或java.util.regex包。

只需使用String.split(",")即可完成。

答案 2 :(得分:0)

以下是通过拆分为String数组来执行此操作的示例。更改的行标记为注释。

// 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
        }