2014-02-12 70 views
1

我正在嘗試將文件讀取到ArrayList。這樣就解決了,我把文件的一行放到了數組列表的一個塊中。但是在這個過程中,我想獲得塊的索引,如果要插入的行包含某個特定的元素。這是迄今爲止我所做的。我被卡住了。獲取索引如果ArrayList中的字符串包含「」

public class practice3 { 

    public static void main(String[] args) throws Exception { 
     Scanner data = new Scanner(new FileReader("StudData1.txt")); 
     ArrayList<String> ArrayData = new ArrayList<String>(); 
     int i = 0; 
     while (data.hasNextLine()) { 
      ArrayData.add(i, data.nextLine()); 
      if (data.nextLine().contains("ID: ")) { 
       System.out.print(ArrayData.indexOf(ArrayData.contains("ID: "))); 
      } 
      i = i + 1; 
     } 
     // System.out.print(ArrayData.get(2)); 
     // System.out.print(ArrayData.size()); 
    } 
} 

例子:

************************ 
Student N. 1 
ID: 4450 
Surname: Wol 
Name: Verine 
************************ 

-------------------------------- 
Subject N. 1 : a. Boat Mantenance 
-------------------------------- 
Homework 1: 89 

Homework 2: 56 

Homework 3: 65 

Homework 4: 3 

Exam 1: 35 

Exam 2: 45 

Exam 3: 89 

Exam 4: 99 
+0

你可以發佈文本數據的例子嗎? –

+2

您正在調用nextLine()兩次。記住字符串變量中的值並檢查此值。 – HectorLector

+1

也要儘量避免用大寫字母開頭的變量名。沒有什麼大規模的,只是一些建議:) – Gorbles

回答

0

試試這個:

while(data.hasNextLine()) 
    { 
     //if you call nextLine() two times you will get two different items 
     String data = data.nextLine(); 
     ArrayData.add(i, data); 

     if (data.contains("ID: ")) 
     { 
      System.out.print(ArrayData.indexOf(data)); 
      //check the index of data, but that should be equal to i. no idea what you want to do here? 
     } 
     i++; 
    } 
+0

工作!我現在看到了邏輯。謝謝!我沒有看到我不得不...... – Heneko

0

你必須這樣做:

String line = data.nextLine(); 

ArrayData.add(i, line); 

if (line.contains("ID: ")) { 
    // do what you want here 
} 
... 

,因爲當你做data.nextLine()它讀取當前行,並傳遞到下一個

+0

@ kai你是對的,我沒有注意到該代碼塊。但即使知道我不知道他在做什麼。 –

0

檢查你的while循環。每次您撥打data.nextLine()時,它都會前進到下一行。你叫它兩次。首先在檢查條件時加入數組列表和秒數。你實際上是增加了一半的文件,並檢查每條備選線路的狀況。

相關問題