【问题标题】:Best way to parse comma delimeted CSV that include commas that arnt delimeters? [Java] [duplicate]解析逗号分隔的 CSV 的最佳方法,其中包括不是分隔符的逗号? [Java] [重复]
【发布时间】:2014-06-18 20:47:53
【问题描述】:

我正在尝试将一些数据集解析到数据库中。我正在使用的 CSV 文件中的数据用逗号分隔。但是,有些数据包含在引号中,其中包括作为该字符串一部分的逗号。鉴于此障碍,我如何逐步遍历每一行数据并解析出每个数据条目?

编辑:CSV 解析器不是一个选项,因为该程序将用于非 csv 文件。我正在尝试最小化外部库。

我发现了这个问题,因为我这里的代码只会解析引号:

while(bufferinput.hasNext()){

            nextline = bufferinput.nextLine();
            dataArray = nextline.split(",");

            for(i = 0; i<colNum;i++){
                //Try-Catch to search through dataArray and push it into sqlData arraylist.
                try{
                    if(!dataArray[i].toString().isEmpty()){
                        sqlData.add(dataArray[i].toString());
                    }
                    //else if used to find empty cells between non empty cells (Have to test to see if opposite of if-statement works)
                    else if(dataArray[i].toString().equals("")){
                        sqlData.add(null);
                    }
                }
                //Catch is necessary to find the cells not at the end of the row in a text file.
                catch(ArrayIndexOutOfBoundsException e){
                    sqlData.add(null);
                }

            }
}

此类数据的示例类似于 ,,"Ontario, Canada",xxxxx.....

位置是最大的原因,因为地址包含逗号。

【问题讨论】:

  • 使用CSV parser?
  • 除了上面链接的 Apache Commons CSV 解析器,它还没有稳定发布(因此可能还没有那么丰富的功能),还有其他各种开源和许可已获得许可的 Java CSV 解析器库。
  • @GriffeyDog 我不能,因为我正在使用这个程序来解析其他 CSV 文件。
  • @user3521471 这些非 CSV 文件是否也会通过您发布的代码运行?
  • @ajp15243 是的,他们这样做了

标签: java parsing csv


【解决方案1】:

所以这是一个非常容易解决的问题。我只需要改变我的分割线:

dataArray = nextline.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多