Java Apache commons CSV |如何在字段中忽略/包含分号、逗号?

Java Apache commons CSV |如何在字段中忽略/包含分号、逗号?,java,csv,Java,Csv,我试图将日志解析为一个文件,并将其存储在CSV文件中。下面是一个示例行: 218.1.111.50 - - [13/Mar/2005:10:36:11 -0500] "GET http://www.yahoo.com/ HTTP/1.1" 403 2898 "-" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)" 为此,我使用ApachCommons CSV库。问题是某些字段的特殊字符它们的值,它们被解释为分隔符 例如,如果我们查看字段值Moz

我试图将日志解析为一个文件,并将其存储在CSV文件中。下面是一个示例行:

218.1.111.50 - - [13/Mar/2005:10:36:11 -0500] "GET http://www.yahoo.com/ HTTP/1.1" 403 2898 "-" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)"
为此,我使用ApachCommons CSV库。问题是某些字段的特殊字符
它们的值,它们被解释为分隔符

例如,如果我们查看字段值
Mozilla/4.0(兼容;MSIE 4.01;Windows 95)
。由于
,该单个字段被分配给3个不同的值

我不知道解决这个问题的理想方法。请参阅下面与我使用的库相关的代码快照:

  CSVPrinter printer = new CSVPrinter(writer, CSVFormat.DEFAULT
                    .withHeader(HEADERS));
//
//
Matcher m = p.matcher(line);
                    Date date=formatter.parse(m.group("Time"));

            try {

                printer.printRecord(date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), m.group("NetworkSrcIpv4"),
                        m.group("ApplicationHttpStatus"),m.group("ApplicationLen"),m.group("ApplicationHttpUserAgent"),
                        m.group("ApplicationHttpQueryString"));

                printer.flush();

            } catch (IOException e) {

                e.printStackTrace();

            }
//
是否有可能自动忽略
,或者用一些不会影响预期结果的值替换它们?是否有任何选项可以添加my
CSVprinter


感谢您的反馈。

您可以将选项卡配置为分隔符,而不是使用默认分隔符-

CSVPrinter printer=新的CSVPrinter(writer,CSVFormat.TDF.withHeader(HEADERS))


您是否尝试在有问题的列周围添加引号?类似这样的内容:
“Mozilla/4.0(兼容;MSIE 4.01;Windows 95)”
您的原始CSV是什么样子的?都是,;在一个带引号的字符串中?(即,生成的CSV是错误的,还是您的电子表格读取它的方式?)您使用什么打开CSV-Excel?@MichałZiober不应该CSVFormat.DEFAULT自动执行此操作?@Michal,我正在尝试处理一个非常大的文件,它不一定遵循我的正则表达式规则的相同模式。我不认为这是一个实用的解决方案(当然,除非我需要以编程方式这样做,但这需要时间)日志的问题是它可以包含您作为
分隔符提供的任何字符,因此您需要以某种方式从给定值中删除
分隔符
字符。感谢您的反馈。我试过这个,但没用。它打印相同的结果!您是否在MS EXCEL中打开CSV?我正在使用Libre office。在Libre office中打开分隔符时,您是否尝试过更改分隔符-