【发布时间】: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:它的格式很糟糕 - 我知道,但这是我得到的最糟糕的文件。我可能可以将它们扭曲成至少在字符串周围加上引号
-
好吧,只有在字段中需要分隔符(或引号)时才需要引号。