2015-09-22 1 views
0

В java, я читаю список значений из листа excel. После прочтения файла результат выглядит следующим образом.Как позаботиться о запятой после чтения данных excel

12345678, АБВГДЕЖ, 123, "Летний класс, заливали", 2012

Мне нужно удалить запятые из приведенного выше вывода.

Я использовал StringUtils.commaDelimitedListToStringArray() и присвоен String[]. При использовании этого метода commaDelimitedListToStringArray() «Летний класс, встроенный» делится на два результата.

Есть ли способ избежать этого?

Я хочу прочитать целую строку.

+0

Не используйте commaDelimitedList ... – phil652

+1

Разбор CSV-файлов не так прост, как вы надеетесь. Используйте библиотеку CSV. Http: // StackOverflow.com/questions/200609/can-you-recommended-a-java-library-for-reading-and-possible-writing-csv-файлы –

ответ

0

Вам нужно использовать метод синтаксического анализа, который является более сложным, чем простое разделение на символ.

Как минимум, он должен иметь два режима: разделение и пропуск. Тогда логика будет выглядеть так:

  1. Начало в режиме разделения.
  2. Прочитать характер.
  3. Если в режиме пропусков и символ является цитатой, перейдите в режим разделения.
  4. Если в режиме разделения и символ запятой, то разделите.
  5. Если в режиме разделения и символ является цитатой, перейдите в режим пропусков.
  6. Продолжайте движение в 2, пока все символы не будут прочитаны.

Изучение методов синтаксического анализа - очень полезный инструмент, несмотря на то, что там есть много готовых парсеров. Всегда есть проблемы, требующие «просто» достаточно синтаксического анализа, чтобы потребовать, чтобы вы катили новый инструмент.

Имея это в виду, Я бы добрался до инструмента анализа синтаксиса CSV. Тогда, в некоторых случаях, регулярный анализ регулярных выражений может быть хорошим выбором. Наконец, рекомендуется использовать собственный парсер, но если да, прочитайте на дискретных конечных автоматах.

Если вы изучите DFA, те, кто не понимает математику позади нее, будут удивлены тем, что ваши парсеры работают, а хорошо построенный DFA часто бывает очень быстрым.

+0

Для библиотеки анализа синтаксического анализатора http://pencsv.sourceforge.net/ является длинной стоящий хороший вариант. –

0

Ниже приведен пример использования библиотеки достояния Csv:

import org.apache.commons.csv.CSVFormat; 
import org.apache.commons.csv.CSVParser; 
import org.apache.commons.csv.CSVRecord; 

List<String> results = new ArrayList<String>(); 
try (Reader rdr = new FileReader(pathToFile); CSVParser parser = CSVFormat.DEFAULT.parse(rdr);) 
{ 
    Iterator<CSVRecord> records = parser.iterator(); 
    while (records.hasNext()) 
    { 
     CSVRecord row = records.next(); 
     Iterator<String> values = row.iterator(); 
     while(values.hasNext()) 
     { 
      results.add(values.next()); 
     } 
    } 
} 
catch(IOException e) 
{ 
    // log the error here 
} 
0

univocity-parsers позволяет справиться с этим без каких-либо проблем.

CsvParserSettings settings = new CsvParserSettings(); 
CsvParser parser = new CsvParser(settings); 
List<String[]> allRows = parser.parseAll(new FileReader(new File("/path/to/your.csv"))); 

Раскрытие информации: Я являюсь автором этой библиотеки. Это бесплатно и бесплатно (лицензия Apache V2.0).

Смежные вопросы