使用opencsv CSVReader时如何识别用双引号引起来的CSV单元?

时间:2018-10-02 06:54:55

标签: java csv opencsv

我正在编写一种方法,一次读取一个csv文件,一次读取一个单元格,在某些情况下执行一些处理,最后生成一个新的CSV文件。

问题是,如果单元格被双引号引起来,我不知道如何在新产生的文件中标识和包围它。

例如,使用此输入文件:

  

Michelle,“文本不包含逗号”,主要内容
  米歇尔,“文本,包含逗号”,主要

我的方法产生:

  

Michelle,文本不包含逗号,主要内容
  米歇尔,文本,包含逗号,主语

我的代码:

    public static InputStream checkForXslsFunctions(InputStream inputStream, char[] spChars) throws IOException {

        CSVReader csvReader = new CSVReader(new InputStreamReader(inputStream));

        StringBuilder stringBuilder = new StringBuilder();
        String[] line;

        String stringAsChar = new String(spChars);

        while ((line = csvReader.readNext()) != null) {

            for (String cell : line) {
                if (((Arrays.asList(stringAsChar.split(""))).stream().anyMatch(s -> cell.startsWith(s)))) {
                    stringBuilder.append(APOSTROPHE);
                }

                stringBuilder.append(cell).append(COMMA);
            }
            stringBuilder.deleteCharAt(stringBuilder.lastIndexOf(COMMA));
            stringBuilder.append(System.getProperty("line.separator"));
        }

        byte[] bytes = stringBuilder.toString().getBytes();
        return new ByteArrayInputStream(bytes);
    }

此外,我还尝试使用:

final CSVParser parser =
        new CSVParserBuilder()
                .withSeparator(',')
                .withIgnoreQuotations(true)
                .build();
final CSVReader reader =
        new CSVReaderBuilder(csvStreamReader)
                .withSkipLines(0)
                .withCSVParser(parser)
                .build();

但是它给出了相同的结果。非常感谢您提供任何解决方案。

0 个答案:

没有答案