我试图在java中读取一个csv文件。以下是我的代码

时间:2015-08-27 19:28:14

标签: java csv

final BufferedReader bufferedReader = new BufferedReader(new 
    InputStreamReader(file.getInputStream(entry)));
String line = "";

while ((line = bufferedReader.readLine()) != null) {
    System.out.println("line" + line);

    final String[] rows = line.split(",");

这是我的csv文件

" 9:42:43AM","Aug 20, 2015","RaceSummary","Page:1","Id","Race","Type","Rot.","District","PrideFor","ArtSeq","ReportSeq","Content","Type","Md","Bar Group","1","LINC ADAPTER SECTION 4","Content","N","A - ARLIN","1","1","1","Oscar James, Sr.","Content","0","<N.P.>"

我正在尝试打印我在csv中提到的列。但是我不知道为什么我的输出正在达到“Pride”作为一行而“For”作为另一行就像它重复接下来的两行价值观(“ArtSeq”,“ReportSeq”)。任何人都可以建议我哪里出错了。 感谢。

2 个答案:

答案 0 :(得分:1)

正如您在输入中所看到的,您的第二个值有逗号“2015年8月20日”,这会导致更多的分割数量超出您的预期。 示例: 你会期望这个“上午9:42:43”,“2015年8月20日”是2部分,但它将是3个

$em->attach('ZfcUser\Service\User', 'register', function($e) {

       $user = $e->getParam('user');  // User account object
       $authenticationPlugin = new AuthenticationPlugin();
       $authenticationPlugin->someAction($user->getEmail());
   });

您可以将拆分更改为

[0]" 9:42:43AM"
[1]"Aug 20
[2] 2015"

我认为应该解决你的问题。

答案 1 :(得分:1)

根据您提供的输出...

line" 9:42:43AM","Aug 20, 2015","Race Summary","Page: 1","Id","Race","Type","Rot.","District","Pride 
lineFor","Art lineSeq","Report lineSeq","Content","Type","Md","Bar Group","1","LINC ADAPTER SECTION 4","Content","N","A - ARLIN","1","1","1","Oscar James, Sr.","Content","0","<N.P.>" 

考虑到它与您的输入不同,我猜测输入文件中可能存在特殊字符或某些内容(例如,制表符或行间距)。这导致你的while循环读取第一行(直到换行符),然后读取下一行。如果你将这两个放在文件的同一行,它可能会更好。

我也应该澄清一下,你发布的代码中没有任何内容会导致这种行为,它可能是代码中的其他地方或文件本身。