Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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_Arraylist_Java.util.scanner - Fatal编程技术网

使用Java解析Csv文件时出错

使用Java解析Csv文件时出错,java,csv,arraylist,java.util.scanner,Java,Csv,Arraylist,Java.util.scanner,我有一个csv文件,其值如下: 1/1/1983;1,7;-3;8;-0,7;84;4;2;11;0;1030;0;0 2/1/1983;2,7;-2;8,4;1,9;94;2;2;15;0;1027;0;0 3/1/1983;4,1;-0,4;11,3;3,1;93;3;3;13;0;1030;0;0 4/1/1983;7,6;1,3;15;5,1;84;9;8;28;0;1027;0;0 5/1/1983;5,6;1,4;10;5,1;97;2;2;11;0;1023;0;0 6/1/198

我有一个csv文件,其值如下:

1/1/1983;1,7;-3;8;-0,7;84;4;2;11;0;1030;0;0
2/1/1983;2,7;-2;8,4;1,9;94;2;2;15;0;1027;0;0
3/1/1983;4,1;-0,4;11,3;3,1;93;3;3;13;0;1030;0;0
4/1/1983;7,6;1,3;15;5,1;84;9;8;28;0;1027;0;0
5/1/1983;5,6;1,4;10;5,1;97;2;2;11;0;1023;0;0
6/1/1983;7;5,5;7,5;7;100;1;3;9;0;1028;0;0
7/1/1983;7,7;5;13,4;7,1;96;1;4;20;0;1029;0;0
8/1/1983;7,9;7;15,5;7,4;97;2;7;24;0;1029;0;1
9/1/1983;6,7;1;10,3;4,1;83;8;15;44;0;1033;0;0,3
10/1/1983;2,2;-1,9;8;0,4;88;8;4;13;0;1036;0;0
11/1/1983;0,7;-3,4;6,4;-1,2;87;3;1;13;0;1038;0;0
12/1/1983;0,2;-4,7;8;-1,7;87;6;4;9;0;1037;0;0
13/1/1983;1,7;-5,2;11,1;-0,1;88;4;3;15;0;1032;0;
因此,我在一个网站上发现了一个Csv解析器实现:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

public class ScannerExample 
{
    public static void main(String[] args) throws FileNotFoundException 
    {
        //Array
        ArrayList<String> weather = new ArrayList<String>();
        //Get scanner instance
        Scanner scanner = new Scanner(new File("C:/csv/meteo2.csv"));

        //Set the delimiter used in file
        scanner.useDelimiter(";");

        //Get all tokens and store them in some data structure
        //I am just printing them
        while (scanner.hasNext()) 
        {
            weather.add(scanner.next());
        }
         System.out.println(weather.get(12));
        //Do not forget to close the scanner  
        scanner.close();
    }
}
但它被认为只是一个元素。
有一个解决方案吗?

如果您想要分号和换行符作为分隔符,您应该使用

scanner.useDelimiter("[;\n]");

as需要一个正则表达式作为参数。

如果希望分号和换行符作为分隔符,则应使用

scanner.useDelimiter("[;\n]");

正如所期望的那样,参数应该是正则表达式。

您可以逐行读取文件(
scanner.nextLine()
),然后拆分各行。您可以逐行读取文件(
scanner.nextLine()
),然后拆分各行。很抱歉,它可以工作,但在最后一个元素(0)之后仍保留如上所述的空格,尽管接下来的日期是正确的列表中的另一个元素。我该怎么解?@Markviduka:对不起,我不明白你的意思。上面我有一个字符串“0(新行)2/1/1983”。我用你的代码解决了这个问题,现在,“2/1/1983”是一个新字符串。但是,“0”字符串与上面的问题相同,它是“0(换行)”。希望你understand@Markviduka:否,当
\n
是分隔符之一时,它将不会是令牌的一部分。您可能在打印时插入换行符…抱歉,它可以工作,但在最后一个元素(0)之后仍保留如上所述的空格,尽管后续日期正确地是列表中的另一个元素。我该怎么解?@Markviduka:对不起,我不明白你的意思。上面我有一个字符串“0(新行)2/1/1983”。我用你的代码解决了这个问题,现在,“2/1/1983”是一个新字符串。但是,“0”字符串与上面的问题相同,它是“0(换行)”。希望你understand@Markviduka:否,当
\n
是分隔符之一时,它将不会是令牌的一部分。您可能在打印时插入换行符。。。