Java 使用opencsv阅读器解析包含分隔符作为列值一部分的txt文件

Java 使用opencsv阅读器解析包含分隔符作为列值一部分的txt文件,java,opencsv,Java,Opencsv,我有一个制表符分隔的文本文件,我想用openscsv解析它并上传到数据库。我使用CSVReader来解析文件。问题是,某些列值中有选项卡。例如,一列以一个制表符结尾,然后它有另一个制表符,用于将它与下一列分开 我在解析这个文件时遇到问题。如何避免分隔符作为值的一部分 是我试图解析的文件。每行有2列,共5行。第一行是标题。但是,当我使用以下代码解析它时,只得到3行: CSVReader reader = new CSVReader(new FileReader("input.txt"), '\t'

我有一个制表符分隔的文本文件,我想用openscsv解析它并上传到数据库。我使用CSVReader来解析文件。问题是,某些列值中有选项卡。例如,一列以一个制表符结尾,然后它有另一个制表符,用于将它与下一列分开

我在解析这个文件时遇到问题。如何避免分隔符作为值的一部分

是我试图解析的文件。每行有2列,共5行。第一行是标题。但是,当我使用以下代码解析它时,只得到3行:

CSVReader reader = new CSVReader(new FileReader("input.txt"), '\t');
String[] nextLine;
int cnt = 0;
while ((nextLine = reader.readNext()) != null) {
    if (nextLine != null) {
        cnt++;
        System.out.println("Length of row "+cnt+" = "+nextLine.length);
        System.out.println(Arrays.toString(nextLine));
    }
}
********更新********

执行正常的读取行(如以下)将打印5行:

BufferedReader br = new BufferedReader(new FileReader("input.txt"));
int lines = 0;
while(br.readLine() != null){
    lines++;
}
System.out.println(lines);
在数据上加引号-这里是CSVReaderTest中修改的单元测试,它显示引号将起作用:

@Test
public void testSkippingLinesWithDifferentEscape() throws IOException
{

    StringBuilder sb = new StringBuilder(CSVParser.INITIAL_READ_SIZE);
    sb.append("Skip this line?t with tab").append("\n");   // should skip this
    sb.append("And this line too").append("\n");   // and this
    sb.append("a\t'b\tb\tb'\t'c'").append("\n");  // single quoted elements
    CSVReader c = new CSVReader(new StringReader(sb.toString()), '\t', '\'', '?', 2);

    String[] nextLine = c.readNext();

    assertEquals(3, nextLine.length);

    assertEquals("a", nextLine[0]);
    assertEquals("b\tb\tb", nextLine[1]);
    assertEquals("c", nextLine[2]);
}

如果这不起作用,请发布input.txt中的一些行。当我点击这个链接时,它会把我带到某个试图向我出售dropbox克隆的网站

你不能。请更改分隔符,但它看起来正在工作。它可以避免某些选项卡。它无法识别第2行和第4Thx行的末尾,将尝试您的解决方案。我上传了文件,因为我不想丢失原始格式。当你点击链接时,你可以选择下载这个文件。点击它将下载txt文件。获得该文件!我很抱歉,但我看不到下载文件按钮欣赏所有其他下载应用程序按钮:我将尝试添加一个单元测试来测试这个。好的-仔细查看了你的文件。如果字段中有分隔符,则必须在其周围加引号。在本例中,可以将单引号设置为引号字符,如我上面发布的示例所示。否则,代码如何知道什么是字段的一部分,什么是分隔符?