2014-02-13 133 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)); 
      } 

     }