Java: анализатор CSV - пропуск кавычек
Есть ли способ проанализировать файл CSV (переменное число столбцов) с помощью какого-то синтаксического анализатора CSV (например, SuperCSV) для набора List
id,name,text,sth
1,"John","Text with 'c,o,m,m,a,s' and \"",qwerty
2,Bob,"",,sth
после разбора я бы хотел иметь в наборе тот же текст, что и при вводе, а не:
id,name,text,sth
1,John,Text with 'c,o,m,m,a,s' and \",qwerty
2,Bob,null,null,sth
этот элемент
"Джон" будет проанализирован в строку "Джон" (вместо Джона)
"" -> ""
,, ->, ноль,
и т.п.
Я уже писал об этом здесь, но я, вероятно, не сделал это достаточно ясно. Я хочу проанализировать CSV-файл для набора List
2 ответа
Что-то вроде этого? Не используя какой-либо существующий парсер, делайте это с нуля:
public List<String> parse(String st) {
List<String> result = new ArrayList<String>();
boolean inText = false;
StringBuilder token = new StringBuilder();
char prevCh = 0;
for (int i = 0; i < st.length(); i++) {
char ch = st.charAt(i);
if (ch == ',' && !inText) {
result.add(token.toString());
token = new StringBuilder();
continue;
}
if (ch == '"' && inText) {
if (prevCh == '\\') {
token.deleteCharAt(token.length() - 1);
} else {
inText = false;
}
} else if (ch == '"' && !inText) {
inText = true;
}
token.append(ch);
prevCh = ch;
}
result.add(token.toString());
return result;
}
затем
String st = "1,\"John\",\"Text with 'c,o,m,m,a,s' and \\\"\",qwerty";
List<String> result = parse(st);
System.out.println(result);
Распечатает:
[1, "John", "Text with 'c,o,m,m,a,s' and "", qwerty]
Я использовал это: http://opencsv.sourceforge.net/
И я был довольно доволен результатами. У меня была куча по-разному организованных CSV-файлов (иногда забавно, что люди называют CSV-файлами в наши дни), и мне удалось настроить ридер для этого. Тем не менее, я не думаю, что он будет генерировать запятые, но он оставит пробелы там, где есть пустое поле. Так как вы можете извлечь всю строку в виде массива, вы можете выполнять итерацию, но запятую между каждой итерацией.
Посмотрите настройки, их много, включая символы кавычек.