这可能是一个简单的问题,但我找不到满意的答案。我正在用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()。 /捂脸答案 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(",");