2012-03-20 47 views
0

我有字符串的形式上传到服务器我的CSV文件:在Java中的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]; 

它显示了结果:

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

当我CSV与下面的代码解析

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]我预计reslt是伦敦,我的令牌4预期的结果是22-June-2012。我如何做这个分裂?

+1

CSV代表'逗号分隔值'虽然您的记录样本似乎没有任何逗号 – danielpops 2012-03-20 23:44:44

+0

但是,它在CSV Excel文件中,所以逗号不可见。 – user1282157 2012-03-21 00:13:18

+0

顺便说一句,您应该阅读文件通过'Reader',而不是'InputStream',因为你对文件中的字符感兴趣,而不是字节。 – 2012-03-21 00:33:19

回答

0

每一行都在它自己的行上,所以你需要先按行读取你的输入行然后再分割它。

+0

如何逐行读取此代码? – user1282157 2012-03-21 00:12:23

+0

即使您没有逐行读取文件,您已经知道如何将文本拆分为更小的块。所以首先在换行符('[\ r \ n] +')上分割,然后用逗号分割。 – 2012-03-21 00:27:50

+0

@ user1282157由于您尚未进行真正的字节到字符转换,因此可以使用DataInputStream读取行。真正的字符相当于一个BufferedReader。 – Neil 2012-03-21 21:40:27

0

既然你知道的数据是“Excel的CSV格式”你应该寻找一个可以处理该格式的库。有几个你可以免费使用。之后,阅读文件变得非常简单,因为您不必再​​担心文件格式。你的代码应该只关注readLinereadField,而不是关于处理IO东西本身。