Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 知道CSV文件的分隔符_Java_Csv_Java.util.scanner - Fatal编程技术网

Java 知道CSV文件的分隔符

Java 知道CSV文件的分隔符,java,csv,java.util.scanner,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 fil

这可能是一个简单的问题,但我未能找到令人满意的答案。我正在用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()/facepalm

如果您试图阅读每个单独的项目,请尝试:

s.useDelimiter(",");

然后
s.next()
将从CSV返回一个项目。

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

s.useDelimiter(",");

然后
s.next()
将从CSV返回一个项目。

为什么CSV分隔符中有一个\n?如果CSV文件和TXT文件的内容相同,Java文件之间没有区别

我想你会想要的

s.useDelimiter(",");


为什么CSV分隔符中有一个\n?如果CSV文件和TXT文件的内容相同,Java文件之间没有区别

我想你会想要的

s.useDelimiter(",");


考虑以下几点:

first,second,"the third",fourth,"the,fifth"
应仅为5-最后一个逗号位于引号块中,不应拆分

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


快速的谷歌搜索产生了,我相信还有其他的。

考虑以下几点:

first,second,"the third",fourth,"the,fifth"
应仅为5-最后一个逗号位于引号块中,不应拆分

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


快速的谷歌搜索产生了效果,我相信还有其他方法。

有几种解决方法:

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

if(ext == 'csv') {
  s.useDelimiter(", \n");
} else if(ext == 'txt') {
  s.useDelimiter("[\\s,\r\n]+");
}
方法2: 正如其他答案所建议的,使用以下方法:

s.useDelimiter(",");

有几种解决方法:

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

if(ext == 'csv') {
  s.useDelimiter(", \n");
} else if(ext == 'txt') {
  s.useDelimiter("[\\s,\r\n]+");
}
方法2: 正如其他答案所建议的,使用以下方法:

s.useDelimiter(",");

你能提供一两个.csv文件的样本行吗?当然。我将把它添加到我的问题中。您可能想看一看我在您的示例输入中没有看到任何逗号。您能提供一行或两行.csv文件的示例吗?当然。我将把它添加到我的问题中,您可能想看一看,我在您的示例输入中没有看到任何逗号。谢谢。我认为自己编写代码会更简单,因为输入总是完全相同的。这是一个很好的库,可以解析和生成各种CSV格式以及制表符分隔的文件。谢谢。我认为自己编写代码会更简单,因为输入总是完全相同的。这是一个很好的库,可以解析和生成各种CSV格式以及制表符分隔的文件。我必须说,我更喜欢glowcoder的响应,而不是我自己的响应。我以前在我们的应用程序中有一个自制的CSV解析器,这让我很头疼。我必须说我更喜欢glowcoder的响应而不是我自己的。我以前在我们的应用程序中有一个自制的CSV解析器,这让我很头疼。