Univocity 解析器 - 提供的信息太少时会自动检测错误的定界符

Univocity parser - false delimiter autodetection when too little information given

我将解析器设置为自动检测定界符

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

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

我得到了什么:

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

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

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

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

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

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

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

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

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