Автор библиотеки здесь.Это не ошибка парсера.Проблема, с которой вы столкнулись, заключается в том, что вы НЕ анализируете файл CSV.
Когда анализатор видит: dstcountry="United
, за которым следует пробел (который является вашим разделителем), он будет рассматривать это как значение.
Параметр кавычки применяется только к полям, начинающимся с символа кавычки.Поскольку ваш ввод не "dstcountry=""United States"""
, парсер не сможет обработать это так, как вы хотите.Нет парсера CSV, который мог бы сделать это для вас.
Опять же, вы не обрабатываете CSV.Единственное, что вы можете здесь сделать, - это использовать 2 экземпляра синтаксического анализатора: один для разбиения строки вокруг =
, а другой - для разбивки значений, разделенных
в результате первого синтаксического анализатора.Например:
CsvParserSettings parserSettings = new CsvParserSettings();
//break down the rows around the `=` character
parserSettings.getFormat().setDelimiter('=');
CsvParser keyValueParser = new CsvParser(parserSettings);
String line = "dstcountry=\"United States\" date=2018-12-13 time=23:47:32";
String[] keyPairs = keyValueParser.parseLine(line);
//break down each value around the whitespace.
parserSettings.getFormat().setDelimiter(' ');
CsvParser valueParser = new CsvParser(parserSettings);
//add all values to a list
List<String> row = new ArrayList<String>();
for(String value : keyPairs){
//if a value has a whitespace, break it down using the the other parser instance
String[] values = valueParser.parseLine(value);
Collections.addAll(row, values);
}
//here is your result
System.out.println(row);
Это распечатает:
[dstcountry, United States, date, 2018-12-13, time, 23:47:32]
Теперь у вас есть ключевые значения.Следующий код распечатает это, как вы хотите:
for (int i = 0; i < row.size(); i += 2) {
System.out.println(row.get(i) + " = " + row.get(i + 1));
}
Вывод:
dstcountry = United States
date = 2018-12-13
time = 23:47:32
Надеюсь, это поможет, и спасибо за использование наших парсеров!