知道CSV文件的分隔符

时间:2011-04-18 03:36:44

标签: java csv java.util.scanner

这可能是一个简单的问题,但我找不到满意的答案。我正在用Java编写一个类,需要在三列中加入一个填充了双精度的.csv文件。显然.csv文件使用逗号作为分隔符,但是当我尝试使用扫描仪设置它们时,扫描程序什么都没找到。有什么建议吗?

Scanner s = null;
try {
  s = new Scanner(source);
  //s.useDelimiter("[\\s,\r\n]+"); //This one works if I am using a .txt file
  //s.useDelimiter(", \n"); // This is what I thought would work for a .csv file
  ...
} catch (FileNotFoundException e) {
  System.err.format("FileNotFoundException: %s%s", e);
} catch (IOException e) {
  System.err.format("IOException: %s%n", e);
}

示例输入为:

12.3 11.2 27.0

0.5 97.1 18.3

感谢您的时间!

编辑:修复!找到了正确的分隔符并意识到我使用的是hasNextInt()而不是hasNextDouble()。 /捂脸

4 个答案:

答案 0 :(得分:3)

请考虑以下事项:

first,second,"the third",fourth,"the,fifth"

应该只有五个 - 最后一个逗号位于引用块中,不应该被拆分。

不要重新发明轮子。有一些开源库可以处理这种行为。

快速谷歌搜索产生了http://opencsv.sourceforge.net/,我确信还有其他人。

答案 1 :(得分:1)

如果您尝试阅读每个项目,请尝试:

s.useDelimiter(",");

然后s.next()将返回CSV中的项目。

答案 2 :(得分:1)

为什么你的CSV分隔符中有\ n?如果CSV和TXT文件具有相同的内容,则它们之间没有区别。

我认为你会想要

s.useDelimiter(",");

s.useDelimiter("[\\s]+,[\\s\r\n]*");

答案 3 :(得分:1)

有几种解决方法:

方法1: 在文件扩展名中使用条件语句(if-else / switch)。

if(ext == 'csv') {
  s.useDelimiter(", \n");
} else if(ext == 'txt') {
  s.useDelimiter("[\\s,\r\n]+");
}

方法2: 如其他答案所示,请使用:

s.useDelimiter(",");