使用自定义字符串分隔符解析CSV文件

4

我尝试使用两个API - JSefaOpenCSV - 解析CSV文件,但问题在于CSV文件中的分隔符是双制表符"\t\t",而这些API仅接受字符,而不是字符串作为分隔符。

是否有其他API可以解决这个问题,或者在Jsefa或OpenCSV中确定新的字符串分隔符的方法?

作为最后的办法,在解析之前,我可以尝试用分号替换双制表符,但我希望以更清晰的方式解决这个问题。


当您从CSV文件中读取一行并使用"\t\t"进行分割时会发生什么? - Ravinder Reddy
那就是我最终所做的,我逐行手动解析文件,并通过双制表符字符串进行分割。 - Jad B.
5个回答

2

网上有101个例子。我谷歌搜索了“java解析csv”,而这是第一篇结果:

http://www.mkyong.com/java/how-to-read-and-parse-csv-file-in-java/

这篇文章使用字符串作为分隔符,但这只是一段代码而非API。

考虑到解析CSV文件是一个相对简单的过程,我认为这并不需要使用库,特别是像你所遇到的奇怪的\t\t分隔符这种稍微特殊的情况,最好还是直接编写代码。


我同意自己制作一个定制的JAVA CSV阅读器比使用API更可取。 - KNU
2
我不同意读取/解析CSV是一件简单的事情。它会变得非常棘手(例如,包含字段分隔符的引用字符串)。但他可以使用openCSV并简单地子类化CSVParser.parseLine() - Dirk Lachowski
建议将其作为答案@DirkLachowski - Charles Goodwin

0

0

尝试这个:

ArrayList<String> itemsOne=new ArrayList<String>();
ArrayList<String> itemsTwo=new ArrayList<String>();

InputStream is = getResources().openRawResource(R.raw.csvfile);
try {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    String line;

    while ((line = reader.readLine()) != null ) {
        String [] rowData = line.split("\t\t");
        itemsOne.add(rowData[0]);
        itemsTwo.add(rowData[1]);
    }
} catch (Exception e) {}

0

是的,opencsv 不支持使用 String 作为分隔符。

一个简单的解决方案是使用 '\t' 作为分隔符,并忽略空字段。

例如:

String s = "1\t\t2\t\t3\t\t4";

String[7] fields;
fields[0] = "1";
fields[1] = "";
fields[2] = "2";
fields[3] = "";
...

我认为这不会有帮助,因为我使用Jsefa将提取的行映射到相应的对象。 - Jad B.

0
您提出的解决方案(将分隔符字符串替换为字符)似乎是最好的选择,因为它简单易行并解决了您的问题。 CSV是一种非常简单的格式,如果您添加复杂的分隔符进行修改,则它就不再是“逗号分隔值”格式了。保持简单!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接