2014-03-29 21 views
0

獲取信息時我沒有看到什麼我想通過使用「\ n」作爲分隔符將事件信息先分解爲一個String [],然後再將它們分成一個String []但這次使用「;」作爲分隔符。 但是,我無法將信息從第二次拆分中解脫出來。當我從字符串[]

public static void initHashMap(){ 
    String[] lijnen = readDefinitioncsv(definitioncsv).split("\n"); 
    for (int i =2;i<lijnen.length;i++){ 
     String[] detaillijn = lijnen[i].split(";"); 



     // on the line below I get 
     //java.lang.ArrayIndexOutOfBoundsException: 1 

     int rood = Integer.parseInt(detaillijn[1]); 
     int groen = Integer.parseInt(detaillijn[2]); 
     int blauw = Integer.parseInt(detaillijn[3]); 
     String provincieNaam = detaillijn[4]; 
     RGBProvince.put(new Color(rood,groen,blauw), provincieNaam); 
    } 
} 

謝謝您的時間

+1

你有多少「\ n」? – innoSPG

+2

你能給我們一個你正在閱讀的'definitioncsv'文件的樣本嗎?如果csv小於3,則不起作用。 –

+0

一些調試,或者至少一個簡單的'System.out.println(「Splitting \」「+ lijnen [i] +」\「給出」+ Arrays.toString(detaillijn));''可能已經在這裏帶來了一些見解.. – Marco13

回答

1
String[] lijnen = readDefinitioncsv(definitioncsv).split("\r?\n"); 
for (int i =2;i<lijnen.length;i++){ 
    String[] detaillijn = lijnen[i].split("[,;\t]"); 
    if (detaillijn.length < 5) { 
     throw new IllegalArgumentException("Weiniger als 5 elementen: " 
       + lijnen[i]); 
    } 

這種處理Windows行尾(\r\n又名CR + LF)以及其他形式的CSV的 - 作爲;似乎沒有發揮作用。

文件可能以空行結束,在這種情況下,您需要跳過continue

對於好的訂單,指數從0開始;你似乎在跳過2個標題行和第一列。

0

爲什麼你的for循環初始化在第三的位置?

for (int i =2;i<lijnen.length;i++){ 

想必您想要i=0

還您陣列可能不會有2個元素:

int rood = Integer.parseInt(detaillijn[1]); 

這是第二個位置。但由於上面的循環,它可能什麼也沒有。

在跳到數組中的一個之前,您應該至少檢查一下您是否有多條線/列。

0

您在for循環中將i初始化爲2。如果您的array的項目少於三項,您將獲得一個索引超出界限,嘗試訪問不存在的位置。

爲什麼不從int i = 0開始?