Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java CSV解析器使用Scanner.useDelimiter(";\r\n";)分隔行不';行不通_Java_Regex_Parsing_Csv - Fatal编程技术网

Java CSV解析器使用Scanner.useDelimiter(";\r\n";)分隔行不';行不通

Java CSV解析器使用Scanner.useDelimiter(";\r\n";)分隔行不';行不通,java,regex,parsing,csv,Java,Regex,Parsing,Csv,因为我们知道CSV文件内容的每一行都是使用\r\n分隔的,所以我们可以很容易地获得每一行。代码如下: scanner.useDelimiter("\r\n"); while(scanner.hasNext()){ scanner.next(); } 但是,如果CSV文件的某个字段中有“\r\n”,那么该代码将无法工作!就像这里的CSV: 第1行:“abc\r\nabc”、“abc”、“abc” 第2行:“efg”、“efg”、“efg” 第3行:“hjk”,“hjk” 我想使用扫描

因为我们知道CSV文件内容的每一行都是使用
\r\n
分隔的,所以我们可以很容易地获得每一行。代码如下:

scanner.useDelimiter("\r\n"); 
while(scanner.hasNext()){
    scanner.next();
}
但是,如果CSV文件的某个字段中有“\r\n”,那么该代码将无法工作!就像这里的CSV:

第1行:“abc\r\nabc”、“abc”、“abc”
第2行:“efg”、“efg”、“efg”
第3行:“hjk”,“hjk”

我想使用扫描仪以如下方式读取:

“abc\r\nabc”、“abc”、“abc”
“efg”、“efg”、“efg”
“hjk”,“hjk”
但如果只是使用
\r\n
,结果是:

“abc
abc,abc,abc
“efg”、“efg”、“efg”
“hjk”,“hjk”

我应该做什么更改?如何修改
扫描仪。使用delimiter(“\r\n”)
,使模式可行?

首先,我建议您研究现有的CSV解析库。我想他们会很好地处理字段delimeters(
)之间存在的任何内容,包括相同的字符终止您的行。请参阅相关问题:


如果做不到这一点,我将尝试实现此SO问题中提出的解决方案:。

您可以尝试使用分隔符:

 "\"\r\n\""

如果每一行的开头和结尾都有一个“,那么这应该是可行的。尽管如果其中一个字符串只包含一个换行符,它仍然会被破坏。

总是很容易推出您自己的解决方案,但是像嵌入式换行符这样的问题使CSV库的使用更加容易

为嵌入的换行符(它是CSV的MIME类型定义)以及嵌入的引号和分隔符(都是可配置的)提供服务。除了能够读入列表、映射或POJO之外,您还可以定义以转换或验证数据,当出现问题时,您将获得更多信息(行号、行号、列号等)

我们(超级CSV团队)刚刚发布了一个,它带来了许多改进和错误修复,以及一个使用Dozer在CSV文件和POJO之间映射的


它在SourceForge或Maven上可用。

分隔符不应该改为“,”吗?我想使用scanner来分隔行,首先我使用了bufferedreader,但当遇到“\n”时它会停止,但我刚刚发现scanner.useDelimiter(“\r\n”)也不起作用。。因为在CSV的字段中可能包含“\r\n”也可以位于CSV字段内。在我的代码中,我尝试先分隔行,在中读取每行CSV,然后在每行字段中使用其他模式分隔。如果\r\n位于引号之间,则它不是CSV文件。我错了“,”也可以在CSV的一个字段内。在我的代码中,我尝试先分隔行,读取CSV的每一行,然后在每一行字段中,使用其他模式分隔它们,我发现了一个非常有用的模式,但现在我的问题是我无法成功分隔行。也许我的方法太愚蠢了。但无论如何,谢谢。@PengzhiZhou我会rongly建议你寻找一个CSV库。不要在这一个上重新发明轮子!人们已经解决了这些问题并取得了成功。另请参阅我答案中的新链接。感谢你的好意建议,实际上这是一个工作测试,我想他们不希望看到我使用其他CSV库。@PengzhiZhou然后查看我添加到的其他链接我编辑过的答案。我已经读过那篇文章了,这是我用来分隔每行字段的模式,但问题是我需要先读取一行字符串,然后我可以应用该模式以“,”分隔。我有一个csv文件,我需要先按行分隔,我只是不知道如何进行分隔。如果我直接使用该帖子的模式分隔整个文件,我将无法使用这些数据再次还原该文件。此分隔符找不到任何匹配项,只会在一个字符串中获得整个文件。似乎在每个换行符中\r\n,我不这样做nk它们将被“”包围。我也在代码中测试了它,很抱歉它不起作用