Я использую OpenCSV для анализа некоторых строк в CSV-файле. В данный момент я сталкиваюсь с довольно обременительным крайним случаем для этого ввода:
'10,00', '20,00','aaa', ' false true '\n
'aaaaa\'', '-*/++;;', '','-'
'1898302','21/07/2011','12:59','7104'
Мне нужно сохранить это в List<List<String>>
, чтобы оно совпадало:
listExpected = Arrays.asList(Arrays.asList("10,00", "20,00", "aaa", " false true "),
Arrays.asList("aaaaa'", "-*/++;;", "", "-"),
Arrays.asList("1898302", "21/07/2011", "12:59", "7104"));
Вот ошибка, которую я получаю:
Expected :[[10,00, 20,00, aaa, false true ], [aaaaa', -*/++;;, , -], [1898302, 21/07/2011, 12:59, 7104]]
Actual :[['10, 00', '20, 00', 'aaa', ' false true '], ['aaaaa'', '-*/++;;', '', '-'], ['1898302', '21/07/2011', '12:59', '7104']]
Вот код, который я использую:
List<String> splittedLines = // manually split
List<List<String>> toReturn = new ArrayList<>();
CSVParser csvParser = new CSVParserBuilder()
.withSeparator(',')
.build();
for (String sLines : splittedLines) {
CSVReader reader = new CSVReaderBuilder(new StringReader(sLines))
.withCSVParser(csvParser)
.build();
for (String[] line : reader)
toReturn.add(Arrays.stream(line).collect(toList()));
}
return toReturn;
В первой строке я разбиваю строки вручную, потому что мне нужно выполнить некоторые операции над каждой из них независимо.
Затем я передаю каждую строку читателю, но эти странные форматы меня озадачивают.
Более того, в первой строке ввода разделитель также появляется в одном или нескольких фактических значениях, и библиотека, кажется, не анализирует его точно.
Может кто-нибудь помочь?