修复\n#出现在双引号中解析错误问题

This commit is contained in:
Looly 2024-07-01 15:59:42 +08:00
parent 41cf55184a
commit 0662e77c0a
3 changed files with 33 additions and 1 deletions

View File

@ -260,7 +260,8 @@ public final class CsvParser extends ComputeIter<CsvRow> implements Closeable, S
if(preChar < 0 || preChar == CharUtil.CR || preChar == CharUtil.LF){
// 判断行首字符为指定注释字符的注释开始直到遇到换行符
// 行首分两种1是preChar < 0表示文本开始2是换行符后紧跟就是下一行的开始
if(null != this.config.commentCharacter && c == this.config.commentCharacter){
// issue#IA8WE0 如果注释符出现在包装符内被认为是普通字符
if(!inQuotes && null != this.config.commentCharacter && c == this.config.commentCharacter){
inComment = true;
}
}

View File

@ -0,0 +1,29 @@
package org.dromara.hutool.poi.csv;
import org.dromara.hutool.core.io.file.FileUtil;
import org.junit.jupiter.api.Test;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* https://gitee.com/dromara/hutool/issues/IA8WE0
*/
public class IssueIA8WE0Test {
@Test
void csvReadTest() {
final CsvReader csvReader = new CsvReader();
final CsvData read = csvReader.read(FileUtil.file("issueIA8WE0.csv"));
final List<CsvRow> rows = read.getRows();
assertEquals(1, rows.size());
assertEquals(3, rows.get(0).size());
assertEquals("c1_text1", rows.get(0).get(0));
// 如果\n#出现在双引号中表示实际的文本内容并不算注释
assertEquals("c1_text2\n#c1_text2_line2", rows.get(0).get(1));
assertEquals("c1_text3", rows.get(0).get(2));
csvReader.close();
}
}

View File

@ -0,0 +1,2 @@
c1_text1,"c1_text2
#c1_text2_line2",c1_text3
1 c1_text1 c1_text2 #c1_text2_line2 c1_text3