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

时间:2014-04-14 10:27:20

标签: java parsing csv opencsv

我尝试使用两个API解析CSV文件 - JSefaOpenCSV - 但问题是CSV文件中的分隔符是双选项卡" \ t \ t&# 34;并且API仅接受分隔符的字符,而不是字符串。

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

作为最后的手段,我可​​以在解析之前尝试用分号替换双标签,但我希望这样做更清洁。

4 个答案:

答案 0 :(得分:1)

网上有101个例子。我用Google搜索“java parse csv”,这是第一个结果:

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

使用String作为分隔符,但这是代码而不是API。

鉴于解析CSV文件是一个非常简单的过程,我不认为这是一个需要库的情况的一个很好的例子 - 特别是有一个像奇怪的\t\t分隔符一样的独特要求 - 无论如何,最好只编码它。

答案 1 :(得分: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) {}

答案 2 :(得分: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] = "";
...

答案 3 :(得分:0)

你建议的解决方案(用字符替换分隔符字符串似乎是最好的,因为很容易解决你的问题。 CSV是一种非常简单的格式,如果你修改它添加复杂的分隔符,那么它不是&#34;逗号分隔值&#34;格式化了。保持简单!