就我而言,有效的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
   }
}

有没有一种方法可以先检查定界符,或者允许两个定界符?除了捕捉异常之外,还有谁有更好的主意?

最佳答案

我们在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);

}

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

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

08-18 13:13