Univocity parser - автоопределение ложного разделителя при слишком малой информации
Я установил синтаксический анализатор для автоматического определения разделителей
CsvParserSettings settings = new CsvParserSettings();
settings.detectFormatAutomatically();
У меня есть только одна запись: 47W2E2qxPs, http://usda.gov/mattis.html
Что я имею:
code: 47W2E2qxPshttp url: //usda.gov/mattis.html
Я ожидал, что разделитель будет ,
и не :
так что мой ожидаемый результат будет 47W2E2qxPs
а также http://usda.gov/mattis.html
,
Могу ли я исправить это элегантно?
1 ответ
Автор библиотеки здесь. Процесс обнаружения - это эвристика, которая использует статистику, собранную из нескольких строк части вашего ввода. Поэтому многое зависит от размера ввода.
Его целью является обработка ситуаций, когда вы не можете легко определить, что такое формат CSV, например, когда пользователи загружают вам случайные файлы. Не используйте процесс обнаружения, если вы уже знаете, какой правильный разделитель.
В вашем случае одной строки данных абсолютно недостаточно для надежного определения разделителя, особенно если присутствует несколько символов. С этим мало что можно сделать, кроме проверки того, что было обнаружено в качестве разделителя, прежде чем продолжить:
parser.beginParsing(new File("/path/to/your.csv"));
CsvFormat format = parser.getDetectedFormat();
//check if the format is sane.
Следующая версия (2.6.0) будет включать больше опций, помогающих эвристике, например, предоставление набора разрешенных символов, которые будут использоваться в качестве разделителей - что, вероятно, поможет в вашем случае.