2014-02-13 191 views
3

大家好,我正在嘗試從我創建的ArrayList中獲取值。我有一些索引,我只想在我想要的索引之間打印數據,到目前爲止我已經完成了這個工作,但似乎沒有工作。我認爲get()對於我想要的無效...任何想法?ArrayList,獲取值,從索引()到索引()

public static void main(String[] args) throws Exception { 

    Scanner dataSc = new Scanner(new FileReader("StudData1.txt")); 

    ArrayList<String> ArrayData = new ArrayList<String>(); 
    ArrayList<String> idData = new ArrayList<String>(); 
    ArrayList<String> idIndex = new ArrayList<String>(); 

    int b = 0; 
    int a = 0; 
    int i = 0; 

    while (dataSc.hasNextLine()) { 
     String data = dataSc.nextLine(); 
     ArrayData.add(i, data); 

     if (data.contains("ID: ")) { 
      idData.add(a, data); 
      idData.set(a, (idData.get(a).replaceAll("[\\D]", ""))); 

      a++; 
      b++; 
     } 

     i++; 
     idIndex.add(b, Integer.toString(i)); 
    } 

    int idSt1 = Integer.parseInt(idData.get(0)); 
    int idSt2 = Integer.parseInt(idData.get(1)); 
    int idSt3 = Integer.parseInt(idData.get(2)); 

    int idxID1 = Integer.parseInt(idIndex.get(0)); 
    int idxID2 = Integer.parseInt(idIndex.get(1)); 
    int idxId3 = Integer.parseInt(idIndex.get(2)); 

    if (idSt1 < idSt2 && idSt2 < idSt3) { 

     System.out.println(ArrayData.get(idxID1-3 , idxID2-3);} 
    } 

} 

}

回答

7

它很容易用for循環完成。

for(int i = startindex+1; i<endindex; i++) { 
     System.out.println(ArrayData.get(i)); 
    } 

此循環將打印位於給定索引之間的數組列表中的所有對象。 但沒有方法稱爲get(),它返回介於給定索引之間的項目集合,您只能使用subList(arg0, arg1)方法創建子集合,然後遍歷此子集合。看看該文檔http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html#get%28int%29

例子:

List<String> al = new ArrayList<>(); 
    al.add("a"); 
    al.add("b"); 
    al.add("c"); 
    al.add("d"); 

    List<String> sublist = al.subList(0, 3); //inclusive index 0, exclusive index 3 

    for(String s : sublist) 
     System.out.println(s); 

輸出:A,B,C

+0

會嘗試!在 – Heneko

+0

請告訴我之前從未使用SubList,它工作過嗎? – kai

+0

耶夥計。正是我渴望的!非常感謝 – Heneko

1

可以通過索引從ArrayList如下取的值的範圍。

List<String> list=new ArrayList<>(); 
    list.add("a"); 
    list.add("b"); 
    list.add("c"); 
    list.add("d"); 

    for(int i=0;i<4;i++){ 
     if(i<=2 && i>=1){ 
      System.out.println(list.get(i)); 
     } 
    } 
2

問題是在你的代碼:

System.out.println(ArrayData.get(idxID1-3 , idxID2-3); 

得到方法class ArrayList只接受一個參數,在這裏你傳遞兩個參數。

您可以使用subList(int fromIndex, int toIndex)來得到您想要的結果。

+0

是...我從開始就認爲是問題... – Heneko

+0

您可以使用方法subList解釋爲由凱 – Zeeshan

1

我會那樣做

if (idSt1 < idSt2 && idSt2 < idSt3) { 
      for (int j = idxID1-3; j < idxID2-3; j++){ 
       System.out.println(ArrayData.get(j)); 
      } 

     }