【问题标题】:Regex for java.util.Scanner for csv files?用于 csv 文件的 java.util.Scanner 的正则表达式?
【发布时间】:2012-06-28 12:20:51
【问题描述】:

我想使用 java.util.Scanner 读取 CSV 文件。第一次尝试看起来很有希望:

 Scanner scanner = new Scanner(cFile);
 while (scanner.hasNextLine()) {
    String curLine = scanner.nextLine().trim();
    this.processRow(curLine);
 }

 private void processRow(String workString) {
     Scanner lineScanner = new Scanner(workString);
     lineScanner.useDelimiter(",");
     // .next goes through the elements
     lineScanner.next();
 } 

我面临的挑战是lineScanner.useDelimiter(",");。我的 CSV 在文本中有逗号并转义了双引号:

 Year,Value,Customer,NickName,Rank
 2012,45.56,T3456C,"Mike, \"The Gangster\"",1
 2012,1237.35,"A453F", Joe Armagendon,2
 2012,,X344,"Frank the weasel",3

是否有只过滤分隔符的正则表达式?

【问题讨论】:

  • 我认为为此目的使用解析器会更好。正则表达式必须能够理解转义规则才能解析它。
  • 那不是 CSV。在 CSV 中,引号会用引号转义。见RFC 4180
  • @Joey:它的格式很糟糕 - 我知道,但这是我得到的最糟糕的文件。我可能可以将它们扭曲成至少在字符串周围加上引号
  • 好吧,只有在字段中需要分隔符(或引号)时才需要引号。

标签: java regex csv


【解决方案1】:

正如 nhahtdh 所述,您实际上应该使用解析器,因为 CSV 的工作方式比示例复杂一些。

那里有很多图书馆。我使用和分叉的一个是csvfile。它非常易于使用并且可以很好地完成工作。

【讨论】:

  • 你说得对。但是,我创建了一个 csvfile 的分支并将其放在 Github 下并进行了改进。其中之一是支持行数。你可以在这里查看项目:github.com/carlspring/csv-db-tools。我计划通过 Maven Central 提供该项目。
  • 只是在 Source Forge 网站 'csvfile' 上阅读的评论。 - 感谢您提供新链接。
猜你喜欢
  • 2019-11-15
  • 2012-07-01
  • 2014-01-19
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
相关资源
最近更新 更多