How to properly parse CSV file to 2d Array?

2019-03-02 21:30发布

I'm trying to parse a csv file into a 2d array, where each row is a data entry and each column is a field in that entry.

Doing this all at once simplifies and separates my processing code from my parsing code.

I tried to write a simple parser that used String.Split to separate file by commas. This is a horrible approach as I have discovered. It completely fails to parse any special cases like double quotes, line feeds, and other special chars.

What is the proper way to parse a CSV file into a 2d array as I have described?

Code samples in Java would be appreciated. The array can be a dynamic list object or vector or something like that, it just has to be indexable with two indexers.

标签: java parsing csv
2条回答
【Aperson】
2楼-- · 2019-03-02 22:02

If your file has fields with double quoted entries that contain separators and fields with line feeds, than I doubt that it is a real csv file... a proper csv file is something like this

1;John;Doe;engineer,manager
2;Bart;Foo;engineer,dilbert

while this is "something else":

1;John;Doe;"engineer;manager"
2;Bart;Foo;
   "engineer,dilbert"

And the first example is parseable with String.split on each line.

查看更多
啃猪蹄的小仙女
3楼-- · 2019-03-02 22:17

Have a look at Commons CSV?

CSVParser parser = new CSVParser(new FileReader(file));
String[] line;
while ((line = parser.getLine()) != null) {
     // process
}
查看更多
登录 后发表回答