阅读Excel数据后如何处理逗号

时间:2015-09-22 18:48:15

标签: java parsing csv

java中,我正在阅读excel表中的值列表。读完文件后,输出如下所示。

  

12345678,abcdefg,123,“Summer class,embedded”,2012

我需要从上面的输出中删除逗号。

我使用StringUtils.commaDelimitedListToStringArray()并分配给String[]。使用此commaDelimitedListToStringArray()方法时,“Summer class,embedded”将分为两个结果。

有什么方法可以避免这种情况吗?

我想读整个字符串。

3 个答案:

答案 0 :(得分:0)

您需要使用比字符上的简单拆分更复杂的解析方法。

至少应该有两种模式,Splitting和Skipping。然后逻辑看起来像这样

  1. 从拆分模式开始。
  2. 读一个角色。
  3. 如果处于跳过模式且字符为引号,则转换为分割模式。
  4. 如果处于分割模式,并且该字符是逗号,则拆分。
  5. 如果处于分割模式,并且该字符是引号,则转换为跳过模式。
  6. 继续2,直到读完所有字符。
  7. 学习如何解析是一个非常有用的工具,即使有很多预先构建的解析器。总有一些问题需要"只是"足够的解析需要你滚动一个新工具。

    考虑到这一点,我首先要找到一个CSV文件解析工具。 然后,在某些情况下,正则表达式解析可能是一个不错的选择。 最后,滚动你自己的解析器可能是可取的,但如果你这样做,请阅读离散有限自动机。

    如果您学习DFA,那些不了解其背后的数学知识的人会惊讶于您的解析器工作,并且精心构建的DFA通常非常快。

答案 1 :(得分:0)

以下是使用commons 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
}

答案 2 :(得分: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许可证)。