我有以下格式的数据

PAL : PAL : NF : "INCOME"."Taxable"
PAL : PAL : NF : "EXPENSES"."TotalExpenses"
PAL : PAL : NF : "EXPENSES"."Exceptional"


在Java中,我只想在不进行任何格式化的情况下对数据进行定界,在输出中也应加上引号。我通常使用Univocity,在使用以下代码时,

    //Simple CSV File Read
    List<String[]> allRows;
    try {
        CsvParserSettings settings = new CsvParserSettings();
        settings.getFormat().setLineSeparator("\n");
        settings.getFormat().setDelimiter(':');

        CsvParser parser = new CsvParser(settings);
        allRows = parser.parseAll(new FileReader(new File(csvFile)));
        int i =0, cols=0;
        for(String[] str:allRows){
            i++;
            cols = str.length;

            for(String s:str)
                System.out.print(s+" == ");

            System.out.println("");
            if(i == 10) break;
        }
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


输出如下,句点符号在引号内,我期望输出像输入,引号应该出现。

PAL == PAL == NF == INCOME"."Taxable
PAL == PAL == NF == EXPENSES"."TotalExpenses
PAL == PAL == NF == EXPENSES"."Exceptional


预期产量

PAL == PAL == NF == "INCOME"."Taxable"
PAL == PAL == NF == "EXPENSES"."TotalExpenses"
PAL == PAL == NF == "EXPENSES"."Exceptional"

最佳答案

这里是图书馆的作者。事实是,"INCOME"."Taxable"被当作带引号的值处理,并且将INCOMETaxable之间的引号视为未转义的引号。

基本上,它将尝试“抢救”该值并找到右引号或定界符(由settings.setUnescapedQuoteHandling(...)确定)。

在您的情况下,最简单的方法是将引号字符设置为'或什至\0,如果您的输入始终不必处理带引号的值。有了这个,您应该得到期望的"INCOME"."Taxable"

希望这可以帮助

10-08 01:47