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;
|
inQuotes = false;
|
||||||
} else {
|
} else {
|
||||||
// 字段内容中新行
|
// 字段内容中新行
|
||||||
if (isLineEnd(c)) {
|
if (isLineEnd(c, preChar)) {
|
||||||
inQuotesLineCount++;
|
inQuotesLineCount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -350,11 +350,13 @@ public final class CsvParser extends ComputeIter<CsvRow> implements Closeable, S
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否行结束符
|
* 是否行结束符
|
||||||
|
*
|
||||||
* @param c 符号
|
* @param c 符号
|
||||||
|
* @param preChar 前一个字符
|
||||||
* @return 是否结束
|
* @return 是否结束
|
||||||
* @since 5.7.4
|
* @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;
|
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("a,b,c,d", CollUtil.join(data.getRow(0), ","));
|
||||||
|
|
||||||
Assert.assertEquals(4, data.getRow(2).getOriginalLineNumber());
|
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开始)
|
// 文件中第3行数据,对应原始行号是6(从0开始)
|
||||||
Assert.assertEquals(6, data.getRow(3).getOriginalLineNumber());
|
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("1,2,3,4", CollUtil.join(data.getRow(0), ","));
|
||||||
|
|
||||||
Assert.assertEquals(4, data.getRow(1).getOriginalLineNumber());
|
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开始)
|
// 文件中第3行数据,对应原始行号是6(从0开始)
|
||||||
Assert.assertEquals(6, data.getRow(2).getOriginalLineNumber());
|
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));
|
CsvData data = reader.read(ResourceUtil.getReader("test_lines.csv", CharsetUtil.CHARSET_UTF_8));
|
||||||
|
|
||||||
Assert.assertEquals(4, data.getRow(0).getOriginalLineNumber());
|
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开始)
|
// 文件中第3行数据,对应原始行号是6(从0开始)
|
||||||
Assert.assertEquals(6, data.getRow(1).getOriginalLineNumber());
|
Assert.assertEquals(6, data.getRow(1).getOriginalLineNumber());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user