【问题标题】:CSV parsing in Java: how do I split this token?Java 中的 CSV 解析:如何拆分此令牌?
【发布时间】:2012-03-20 23:35:29
【问题描述】:

我的 CSV 文件中有字符串,格式为:

21-June-2012 Football MU-Chelsea London (first row)
22-June-2012 Basketball NY-MY New York (second row)

当我使用以下代码进行 CSV 解析时:

BufferedInputStream bis = new BufferedInputStream(stream);
ByteArrayBuffer baf = new ByteArrayBuffer (50);int current = 0;
int current = 0;
while ((current = bis.read()) != -1){
    baf.append((byte)current);
}
String stockTxt =  new String (baf.toByteArray());  
String [] tokens = stockTxt.split(",");
String date_CSV     = tokens [2];
String time_CSV     = tokens [3];
String game_CSV     = tokens [4];
String gamedesc_CSV = tokens [5];
String venue_CSV    = tokens [6];

显示结果:

token [0] = 21-June-2012 
token [1] = Football 
token [2] = MU-Chelsea 
token [3] = London 22-June-2012 
token [4] = Basketball 
token [5] = NY-MY
token [6] = New York

对于令牌 [3],我的预期结果是伦敦,而对于令牌 4,我的预期结果是 22-June-2012。我该如何进行拆分?

【问题讨论】:

  • CSV 代表“逗号分隔值”,尽管您的记录样本似乎没有任何逗号
  • Daniel,它在 CSV Excel 文件中,所以逗号是不可见的..
  • 顺便说一句,你应该通过Reader而不是InputStream来读取文件,因为你对文件中的字符感兴趣,而不是字节。

标签: java parsing csv


【解决方案1】:

每一行都在自己的行上,因此您需要先逐行读取输入并将其拆分。

【讨论】:

  • 即使您不逐行阅读文件,您也已经知道如何将文本拆分成更小的块。所以首先在换行符 ([\r\n]+) 上拆分,然后在逗号上拆分。
  • @user1282157 由于您还没有进行真正的字节到字符转换,您可以使用 DataInputStream 来读取行。真正的等效字符是 BufferedReader。
【解决方案2】:

既然您知道数据是“Excel CSV 格式”,您应该搜索可以处理这种格式的库。您可以免费使用几个。之后,读取文件变得非常简单,因为您不再需要关心文件格式。您的代码应该只关心readLinereadField,而不是处理IO 本身。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 2013-07-18
    • 1970-01-01
    • 2011-07-18
    • 2017-07-26
    • 1970-01-01
    • 2010-09-22
    相关资源
    最近更新 更多