如何解析可能具有两个分隔符之一的CSV文件?

Cod*_*224 8 java csv apache-commons-csv

在我的例子中,有效的CSV是用逗号或分号分隔的.我对其他库开放,但它需要是Java.通过Apache CSVParser API阅读,我唯一能想到的就是这样做看起来既低效又丑陋.

try
{
   BufferedReader reader = new BufferedReader(new InputStreamReader(file));
   CSVFormat csvFormat = CSVFormat.EXCEL.withHeader().withDelimiter(';');
   CSVParser parser = csvFormat.parse( reader );
   // now read the records
} 
catch (IOException eee) 
{
   try
   {
      // try the other valid delimeter
      csvFormat = CSVFormat.EXCEL.withHeader().withDelimiter(',');
      parser = csvFormat.parse( reader );
      // now read the records
   }
   catch (IOException eee) 
   {
      // then its really not a valid CSV file
   }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法首先检查分隔符,或者可能允许两个分隔符?除了捕获异常之外,任何人都有更好的想法吗?

Jer*_*kes 5

我们在uniVocity-parsers中为此提供了支持:

public static void main(String... args) {
    CsvParserSettings settings = new CsvParserSettings();
    settings.setDelimiterDetectionEnabled(true);

    CsvParser parser = new CsvParser(settings);

    List<String[]> rows = parser.parseAll(file);

}
Run Code Online (Sandbox Code Playgroud)

解析器还有许多其他功能,我相信您会发现它有用。试试看。

免责声明:我是该库的作者,它是开源的并且免费(apache 2.0许可)