2013-09-24 83 views
0

我有值這樣的一個CSV文件:錯誤解析CSV文件與Java

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(); 
    } 
} 

,但我有一個問題與最後一個元素一行第一個元素連續行: Infact當我在代碼中嘗試打印第十二個元素(必須是0)。它打印

0 
2/1/1983 

但它被認爲只有一個元素。 有一個解決方案呢?

+0

您可以通過行('scanner.nextLine()')讀取文件,然後拆分包含的行。 – Natix

回答

4

如果你想分號和換行符作爲分隔符,你應該使用

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

Scanner#useDelimiter(String pattern)需要一個正則表達式作爲參數。

+0

好的非常感謝:) – alessandrob

+0

對不起,它可以工作,但在最後一個元素(0)仍然是上面的空格之後,儘管現在後續日期正確的是列表中的另一個元素。我該如何解決? – alessandrob

+0

@Markviduka:對不起,我不明白你的意思。 – jlordo