From 7f68383ff6570ee2c6b18992f79534c7cc0721a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Tue, 4 Jan 2022 15:41:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E2=80=9C=20`CsvParser`=20?= =?UTF-8?q?=E5=BD=93=E5=86=85=E5=AE=B9=E8=A1=8C=E5=A4=A7=E4=BA=8E=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E8=A1=8C=EF=BC=8C=E4=B8=94=E5=8F=8C=E5=BC=95=E5=8F=B7?= =?UTF-8?q?=E5=86=85=E5=AD=98=E5=9C=A8\r\n=E6=97=B6=EF=BC=8CisLineEnd?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E5=88=A4=E6=96=AD=E7=BB=93=E6=9E=9C=E6=9C=89?= =?UTF-8?q?=E8=AF=AF=E2=80=9D=20=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cn/hutool/core/text/csv/CsvParser.java | 8 +++++--- .../test/java/cn/hutool/core/text/csv/CsvReaderTest.java | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvParser.java b/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvParser.java index 507c24ecb..02feadee3 100644 --- a/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvParser.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvParser.java @@ -264,7 +264,7 @@ public final class CsvParser extends ComputeIter implements Closeable, S inQuotes = false; } else { // 字段内容中新行 - if (isLineEnd(c)) { + if (isLineEnd(c, preChar)) { inQuotesLineCount++; } } @@ -350,11 +350,13 @@ public final class CsvParser extends ComputeIter 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; } diff --git a/hutool-core/src/test/java/cn/hutool/core/text/csv/CsvReaderTest.java b/hutool-core/src/test/java/cn/hutool/core/text/csv/CsvReaderTest.java index 9563ef44e..44995e88b 100644 --- a/hutool-core/src/test/java/cn/hutool/core/text/csv/CsvReaderTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/text/csv/CsvReaderTest.java @@ -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());