2014-06-26 70 views
0

我想知道如何將以下數據拆分爲多個列表。這裏是我的輸入(來自文本文件,此處重新創建示例):將ArrayLists拆分爲多個ArrayLists

aaaa bbbb cccc,ccc,cccc 

aaaa-- bbbb 

aaaa bbbb cccc- 

aaaa bbbb cccc,ccc 

aaaa- 

aaaa bbbb ccc,cccc,cccc 

分隔每段文本都是空白。我需要編寫的代碼應該創建三個列表,由每行文本文件中每個條目的a,b和c組組成,而忽略任何帶有「 - 」的行。因此,如下我3列應填寫:

Array1: aaaa, aaaa, aaaa 
Array2: bbbb, bbbb, bbbb 
Array3: (cccc,ccc,cccc),(cccc,ccc),(ccc,cccc,cccc) 

括號里加入表明,第三陣應包括所有列出的C值 A,B和C都含有從文本文件導入的字符串。這是我的代碼到目前爲止:

import java.util.*; 
import java.io.*; 

public class SEED{ 

public static void main (String [] args){ 

    try{ 

     BufferedReader in = new BufferedReader(new FileReader("Curated.txt")); 
     String temp; 
     String dash = "-"; 
     int x = 0; 
     List<String> list = new ArrayList<String>(); 
     List<String> names = new ArrayList<String>(); 
     List<String> syn = new ArrayList<String>(); 
     List<String> id = new ArrayList<String>(); 


     while((temp = in.readLine()) != null){ 

      if(!(temp.contains(dash))){ 

       list.add(temp); 

       if(temp.contains(" ")){ 

        String [] temp2 = temp.split(" "); 
        names.add(temp2[0]); 
        syn.add(temp2[1]); 
        id.add(temp2[2]); 

       }else{ 

        System.out.println(temp); 

       }//Close if 

       System.out.println(names.get(x)); 
       System.out.println(syn.get(x)); 
       System.out.println(id.get(x)); 

      x++; 


      }//Close if 


     }//Close while 

    }catch (Exception e){ 

e.printStackTrace(); 
     System.exit(99); 

    }//Close try 

}//Close main 

}//Close class 

但我的輸出總是:什麼都沒有。我怎樣才能將這些值正確保存到3個獨立的數組或列表中?

+0

好,我會遍歷所有元素我會用一個lo t的if和string的contains()來做到這一點。 – Leo

+0

謝謝桑托斯先生,我能找到以下錯誤: java.lang.IndexOutOfBoundsException:指標:1,尺寸:1 \t在java.util.ArrayList.rangeCheck(ArrayList.java:604) \t在SEED.main(SEED.java:39) – user3781288

+0

處,java.util.ArrayList.get(ArrayList.java:382) \t我不會在你的異常處理中使用System.exit(99) – Leo

回答

0

可能是一個例外,並且你正在忽略它。

你抓更改爲

}catch (Exception e){ 
    e.printStackTrace(); 
    System.exit(99); 

}//Close try 
+0

我得到indexoutofbound異常。但是,爲什麼 - 當我向每個列表添加更多值時,我的3個列表是否會變得更大?在代碼 – user3781288

1

你引用list.get(X),但你的X ++和你list.add不會在同步,如果你讀了沒有短劃線。所以(x)將不會是正確的參考。

你爲什麼這樣做:

String [] temp2 = list.get(x).split(" "); 

相反的:

String [] temp2 = temp.split(" "); 

編輯

嘗試:

if(!(temp.contains(dash))){ 

      list.add(temp); 

      if(temp.contains(" ")){ 

       String [] temp2 = temp.split(" "); 
       names.add(temp2[0]); 
       syn.add(temp2[1]); 
       id.add(temp2[2]); 
      }else{ 

       System.out.println(temp); 

      }//Close if 

     }//Close if 

for(int x = 0; x < names.size(); x++) { 

      System.out.println(names.get(x)); 
      System.out.println(syn.get(x)); 
      System.out.println(id.get(x)); 
} 
+0

的第39行的索引1,大小1處拋出異常哦,這會使它稍微簡單一些。老實說,當我編寫代碼時,我只是想用列表的方式來思考。但是不是我的** x ++ **在檢查短劃線的if語句之外,因此不應該通過while循環更新嗎? – user3781288

+0

如果你用破折號讀一行,你不會將它添加到列表中,但是你仍然在遞增x。所以,當你引用list.get(x)時,你會得到一個indexoutofbounds異常 –

+0

這很有道理,但是當我嘗試移動** x ++ **語句時,它只會在未檢測到短劃線時遞增,發生了錯誤。對不起,如果這些看起來像愚蠢的問題,它已經多年,因爲我碰到CS,我有點生鏽 – user3781288