mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
修复 “ CsvParser
当内容行大于第一行,且双引号内存在\r\n时,isLineEnd方法判断结果有误” 的问题
This commit is contained in:
parent
a3b9b0ac6b
commit
7f68383ff6
@ -264,7 +264,7 @@ public final class CsvParser extends ComputeIter<CsvRow> implements Closeable, S
|
||||
inQuotes = false;
|
||||
} else {
|
||||
// 字段内容中新行
|
||||
if (isLineEnd(c)) {
|
||||
if (isLineEnd(c, preChar)) {
|
||||
inQuotesLineCount++;
|
||||
}
|
||||
}
|
||||
@ -350,11 +350,13 @@ public final class CsvParser extends ComputeIter<CsvRow> implements Closeable, S
|
||||
|
||||
/**
|
||||
* 是否行结束符
|
||||
* @param c 符号
|
||||
*
|
||||
* @param c 符号
|
||||
* @param preChar 前一个字符
|
||||
* @return 是否结束
|
||||
* @since 5.7.4
|
||||
*/
|
||||
private boolean isLineEnd(char c){
|
||||
private boolean isLineEnd(char c, int preChar) {
|
||||
return (c == CharUtil.CR || c == CharUtil.LF) && preChar != CharUtil.CR;
|
||||
}
|
||||
|
||||
|
@ -133,7 +133,7 @@ public class CsvReaderTest {
|
||||
Assert.assertEquals("a,b,c,d", CollUtil.join(data.getRow(0), ","));
|
||||
|
||||
Assert.assertEquals(4, data.getRow(2).getOriginalLineNumber());
|
||||
Assert.assertEquals("q,w,e,r,我是一段\n带换行的内容", CollUtil.join(data.getRow(2), ","));
|
||||
Assert.assertEquals("q,w,e,r,我是一段\n带换行的内容", CollUtil.join(data.getRow(2), ",").replace("\r", ""));
|
||||
|
||||
// 文件中第3行数据,对应原始行号是6(从0开始)
|
||||
Assert.assertEquals(6, data.getRow(3).getOriginalLineNumber());
|
||||
@ -150,7 +150,7 @@ public class CsvReaderTest {
|
||||
Assert.assertEquals("1,2,3,4", CollUtil.join(data.getRow(0), ","));
|
||||
|
||||
Assert.assertEquals(4, data.getRow(1).getOriginalLineNumber());
|
||||
Assert.assertEquals("q,w,e,r,我是一段\n带换行的内容", CollUtil.join(data.getRow(1), ","));
|
||||
Assert.assertEquals("q,w,e,r,我是一段\n带换行的内容", CollUtil.join(data.getRow(1), ",").replace("\r", ""));
|
||||
|
||||
// 文件中第3行数据,对应原始行号是6(从0开始)
|
||||
Assert.assertEquals(6, data.getRow(2).getOriginalLineNumber());
|
||||
@ -164,7 +164,7 @@ public class CsvReaderTest {
|
||||
CsvData data = reader.read(ResourceUtil.getReader("test_lines.csv", CharsetUtil.CHARSET_UTF_8));
|
||||
|
||||
Assert.assertEquals(4, data.getRow(0).getOriginalLineNumber());
|
||||
Assert.assertEquals("q,w,e,r,我是一段\n带换行的内容", CollUtil.join(data.getRow(0), ","));
|
||||
Assert.assertEquals("q,w,e,r,我是一段\n带换行的内容", CollUtil.join(data.getRow(0), ",").replace("\r", ""));
|
||||
|
||||
// 文件中第3行数据,对应原始行号是6(从0开始)
|
||||
Assert.assertEquals(6, data.getRow(1).getOriginalLineNumber());
|
||||
|
Loading…
x
Reference in New Issue
Block a user