2014-03-31 205 views
0

其他部分沒有任何錯誤。我讀了excel文件的行。但我想分割這個excel的單元格。我使用陳述String []values1 = data1.split(",");values1[5]=values1[5].replace('"', ' ').trim();。但是有一個特定的單元格,其中有一個,。這個逗號破壞了排列的順序。我應該如何處理它?閱讀CSV文件時處理逗號

File DopCan = new File(filesnames[0]); 

try 
{ 
    Scanner scanner = new Scanner(DopCan); 
    scanner.nextLine(); 
    scanner.nextLine(); 

    while(scanner.hasNext()) 
    { 

     String data = scanner.nextLine(); 
     String []values = data.split(","); 
     values[5]=values[5].replace('"', ' ').trim(); 
     if(Integer.parseInt(values[5])==0) 
     { 
      i++; 
     } 
     else 
     { 
      break; 
     } 
    } 

    scanner.close(); 

    Scanner scanner1 = new Scanner(DopCan); 
    scanner1.nextLine(); 
    scanner1.nextLine(); 
    while(scanner.hasNext()) 
    { 
     ArrayList <PollingPlace> files = new ArrayList(); 
     while (scanner1.hasNext()) 
     { 
      int n=0; 
      String data1 = scanner1.nextLine(); 
      String []values1 = data1.split(","); //Problem here 
      scanner1.nextLine(); 
      String data3=scanner1.nextLine(); 
      String []values3 = data3.split(","); 
      values1[5]=values1[5].replace('"', ' ').trim(); 
      values1[7]=values1[7].replace('"', ' ').trim(); 
      values1[14]=values1[14].replace('"', ' ').trim(); 
      values3[14]=values3[14].replace('"', ' ').trim(); 
      files.add(new PollingPlace(Integer.parseInt(values1[5]),Integer.parseInt(values1[7]),Integer.parseInt(values1[14]),Integer.parseInt(values3[14]))); 

      scanner1.nextLine(); 
      scanner1.close(); 
     } 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+6

這是一個CSV,而不是「excel文件」,然後。使用OpenCSV。 – fge

+0

我的錯誤,但他們似乎是相同的。有什麼不同? – deathlee

+0

不同之處在於CSV通過looong保證金早於Excel;)Excel只是具有讀取它們的可能性,這就是全部(雖然它在處理UTF-8 CSV文件時很糟糕) – fge

回答

0

有一個簡單的答案和一個正確的答案。

簡單的答案是解析字符串更強大的正則表達式用,比如說,

(?:\s*(?:\"([^\"]*)\"|([^,]+))\s*,?)+? 

但CSV原來是一個相當diffucult爲因爲有一些角落情況要考慮。

正確的答案是使用一個庫是什麼,以及正好有歧管他們:JSefaOpenCSV