Java中的CSV解析:如何拆分此令牌?

Java中的CSV解析:如何拆分此令牌?,java,parsing,csv,Java,Parsing,Csv,我已将CSV文件中的字符串以以下形式上载到服务器上: 2012年6月21日切尔西伦敦足球俱乐部(第一排) 2012年6月22日篮球纽约-我的纽约(第二排) 当我使用下面的代码进行CSV解析时: BufferedInputStream bis=新的BufferedInputStream(流); ByteArrayBuffer baf=新ByteArrayBuffer(50);int电流=0; int电流=0; 而((当前=bis.read())!=-1){ baf.append((字节)当前值)

我已将CSV文件中的字符串以以下形式上载到服务器上:

2012年6月21日切尔西伦敦足球俱乐部(第一排)
2012年6月22日篮球纽约-我的纽约(第二排)
当我使用下面的代码进行CSV解析时:

BufferedInputStream bis=新的BufferedInputStream(流);
ByteArrayBuffer baf=新ByteArrayBuffer(50);int电流=0;
int电流=0;
而((当前=bis.read())!=-1){
baf.append((字节)当前值);
}
String stockTxt=新字符串(baf.toByteArray());
String[]tokens=stockTxt.split(“,”);
字符串date_CSV=tokens[2];
字符串时间_CSV=令牌[3];
字符串游戏_CSV=代币[4];
字符串gamedesc_CSV=令牌[5];
字符串vention_CSV=令牌[6];
结果显示:

token[0]=2012年6月21日
代币[1]=足球
代币[2]=MU切尔西
代币[3]=伦敦2012年6月22日
代币[4]=篮球
代币[5]=NY-MY
代币[6]=纽约

对于令牌
[3]
我的预期reslt是伦敦,而令牌4的预期结果是
2012年6月22日
。如何对此进行拆分?

每一行都有自己的行,因此您需要先逐行读取输入并进行拆分。

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

CSV代表“逗号分隔值”,尽管您的记录样本似乎没有任何逗号,但它在CSV Excel文件中,因此逗号不可见。。顺便说一下,您应该通过
读取器
,而不是
输入流
,来读取文件,因为您感兴趣的是文件中的字符,而不是字节。即使您不逐行读取文件,您也已经知道如何将文本分割成更小的块。因此,首先在换行符(
[\r\n]+
)上拆分,然后在逗号上拆分。@user1282157因为您还没有进行真正的字节到字符转换,所以可以使用DataInputStream来读取行。真正的角色等价物是BufferedReader。