2

我将解析器设置为自动检测分隔符

CsvParserSettings settings = new CsvParserSettings();
settings.detectFormatAutomatically();

我只有 1 条记录:47W2E2qxPs, http://usda.gov/mattis.html

我得到了什么:

code: 47W2E2qxPshttp url: //usda.gov/mattis.html

我希望分隔符是,而不是:

所以我的预期结果是47W2E2qxPsand http://usda.gov/mattis.html

我可以用优雅的方式修复它吗?

4

1 回答 1

1

图书馆的作者在这里。检测过程是一种启发式方法,它使用从输入的多行中收集的统计信息。因此,它在很大程度上取决于输入的大小。

其目的是处理您无法轻松确定 CSV 格式的情况 - 例如当用户向您上传随机文件时。如果您已经知道什么是正确的分隔符,请不要使用检测过程。

在您的情况下,一行数据绝对不足以可靠地检测分隔符,尤其是在存在多个符号的情况下。除了在继续之前测试检测到的分隔符之外,您几乎无能为力:

parser.beginParsing(new File("/path/to/your.csv"));
CsvFormat format = parser.getDetectedFormat();
//check if the format is sane.

下一个版本(2.6.0)将包括更多选项来辅助启发式,例如提供一组允许的字符用作分隔符 - 这可能对您的情况有所帮助。

于 2017-11-29T01:19:17.333 回答