Я пытаюсь разобрать csv с помощью java и иметь следующую проблему: второй столбец представляет собой строку (которая также может содержать запятую), заключенную в двойные кавычки, за исключением случаев, когда сама строка содержит двойную кавычку, тогда вся строка заключена в одну цитату. напримерparse csv, не разделяйте в одиночных или двойных кавычках
Линия может Локк, как это:
someStuff,"hello", someStuff
someStuff,"hello, SO", someStuff
someStuff,'say "hello, world"', someStuff
someStuff,'say "hello, world', someStuff
someStuff заполнители для других элементов, которые также могут включать цитаты в том же стиле
я ищу общий способ разделить строки на запятые UNLESS, заключенные в одиночные или двойные кавычки, чтобы получить второй столбец как String. Со второй колонке я имею в виду поля:
- привет
- привет, SO
- сказать "привет, мир"
- сказать «привет, мир
Я попытался OpenCSV но не в можно указать только один тип цитаты:
public class CSVDemo {
public static void main(String[] args) throws IOException {
CSVDemo demo = new CSVDemo();
demo.process("input.csv");
}
public void process(String fileName) throws IOException {
String file = this.getClass().getClassLoader().getResource(fileName)
.getFile();
CSVReader reader = new CSVReader(new FileReader(file));
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
System.out.println(nextLine[0] + " | " + nextLine[1] + " | "
+ nextLine[2]);
}
}
}
Решение с opencsv терпит неудачу на последней строке, где есть только один двойной кавычки заключены в одинарные кавычки:
someStuff | hello | someStuff
someStuff | hello, SO | someStuff
someStuff | 'say "hello, world"' | someStuff
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
может изменить данные поживаете? '" say \ "привет, мир \" "должен работать в opencsv. –
Данные находятся в файле, поэтому я могу его изменить. Я догадываюсь до разбора ... например, читать строку, изменять/исключать цитату, а затем разделить ее –