2014-02-13 2 views
3

Привет всем Я пытаюсь получить значения из созданного ArrayList. У меня есть некоторые индексы, и я хочу печатать данные ТОЛЬКО между индексами, которые я хочу, пока что я сделал это, но он, похоже, не работает. Я думаю, что get() недействителен для желания, которого я хочу ... Любые идеи?ArrayList, Получение значений, from index() to index()

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(int i = startindex+1; i<endindex; i++) { 
     System.out.println(ArrayData.get(i)); 
    } 

Этот цикл будет печатать все объекты в массиве, находящиеся между данными индексами. Но нет метода, называемого get(), который возвращает коллекцию элементов, находящихся между указанными индексами, вы можете использовать только метод subList(arg0, arg1) для создания подмножества, а затем итерации по этому подмножеству. Посмотрите на Docs 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); 

Выход: а, б, в

+0

будет попробовать! никогда не использовал SubList до – Heneko

+0

PLS сказать мне, это сработало? – 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); 

получить метод класс ArrayList принимает только один аргумент, здесь вы проходите два.

subList(int fromIndex, int toIndex) Чтобы получить желаемый результат, вы можете использовать subList(int fromIndex, int toIndex).

+0

Yup ... Я предположил с самого начала, что было проблемой ... – Heneko

+0

Вы можете использовать метод subList, как объясняется kai – Zeeshan

1

я хотел бы сделать это как то

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

     }