在java
中,我正在阅读excel表中的值列表。读完文件后,输出如下所示。
12345678,abcdefg,123,“Summer class,embedded”,2012
我需要从上面的输出中删除逗号。
我使用StringUtils.commaDelimitedListToStringArray()
并分配给String[]
。使用此commaDelimitedListToStringArray()
方法时,“Summer class,embedded”将分为两个结果。
有什么方法可以避免这种情况吗?
我想读整个字符串。
答案 0 :(得分:0)
您需要使用比字符上的简单拆分更复杂的解析方法。
至少应该有两种模式,Splitting和Skipping。然后逻辑看起来像这样
学习如何解析是一个非常有用的工具,即使有很多预先构建的解析器。总有一些问题需要"只是"足够的解析需要你滚动一个新工具。
考虑到这一点,我首先要找到一个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许可证)。