У меня есть строка csv, содержащая пять полей (3 обязательных и 2 необязательных). Необязательные поля находятся в позиции 3 и 5. У меня есть шаблон регулярного выражения для идентификации строк в двойных кавычках
private static final String TEXT_IN_DBL_QUOTES_REGEX="\"([^\"]*)\"";
private static final String rowData="\"Field1\", \"Field2\", , \"Field4\", ";
public static void main(String[] args){
List<String> fields = Lists.newArrayList();
Pattern regex = Pattern.compile(TEXT_IN_DBL_QUOTES_REGEX);
Matcher matcher = regex.matcher(rowData);
while(matcher.find()){
fields.add(matcher.group(1));
}
return fields;
}
My expected result is an array list containing
Field1, Field2, null, Field4, null
but the above is returning
Field1, Field2, Field4
Как я могу настроить вышеуказанный код, чтобы получить желаемый результат?
Вы можете настроить свое регулярное выражение следующим образом:
String TEXT_IN_DBL_QUOTES_REGEX="\"([^\"]*)\"|(?<=,) *(?=,|$)";
String rowData="\"Field1\", \"Field2\", , \"Field4\", ";
List<String> fields = new ArrayList<>();
Pattern regex = Pattern.compile(TEXT_IN_DBL_QUOTES_REGEX);
Matcher matcher = regex.matcher(rowData);
while(matcher.find()) {
fields.add(matcher.group(1));
}
System.out.println (fields);
Вывод:
[Field1, Field2, null, Field4, null]