2014-01-07 30 views
1

我很抱歉,如果這之前已被回答,但我不太清楚如何正確地問這個。在Java中,我如何抓取數組列表中的特定行?

比方說,我有一個列表的文本文件:

name1 info A 

name2 info B 

name3 info C 

name4 info A 

我如何設置它,這樣如果我提示用戶輸入字母(A爲例),它將存儲的名稱和帶有字母A的行在構造函數中的信息?

我知道如何使用BufferedReaderTokenizer來讀取行並將它們存儲在數組列表中。我只是不太確定如何從一個特定的列表中獲取特定的行。

任何形式的幫助將不勝感激!

謝謝。

+0

將行存儲在一個'ArrayList '中,並在處理後,用替換的信息將它們寫回到文件中。 –

+2

是ArrayList真的你需要什麼? (列表以數字順序排列,因此您可以通過傳遞索引來檢索條目,例如:'get item 5')。但是,我認爲您需要的是'Map':http://docs.oracle.com/javase/ 7/docs/api/java/util/Map.html地圖是鍵和值的集合。它看起來像你想用字母作爲鍵和名稱/信息作爲值,例如:'給我關鍵字A'的值。 –

+0

或者Guava MultiMap http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html。 – Raman

回答

1

如果我理解你以後,你可以用這樣的方法pruneList

public static void pruneList(java.util.List<String> al, String match) { 
    java.util.Iterator<String> iter = al.iterator(); 
    while (iter.hasNext()) { 
     if (iter.next().contains(match)) { 
      continue; 
     } 
     iter.remove(); 
    } 
} 

public static void main(String[] args) { 
    String[] arr = { "name1 info A", "name2 info B", "name3 info C", 
      "name4 info A" }; 
    java.util.List<String> al = new java.util.ArrayList<String>(
      java.util.Arrays.asList(arr)); 
    System.out.println("Before pruning"); 
    System.out.println(al); 

    pruneList(al, "A"); 

    System.out.println("After pruning"); 
    System.out.println(al); 
} 

,輸出

Before pruning 
[name1 info A, name2 info B, name3 info C, name4 info A] 
After pruning 
[name1 info A, name4 info A] 
+0

謝謝你,我會試試。 – user3170143

0
String userInput = "A"; 
FileInputStream file = new FileInputStream("d:\\demo.txt"); 
DataInputStream in = new DataInputStream(file); 
BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
String strLine; 

while ((strLine = br.readLine()) != null) { 
     if(strLine.contains(userInput)) 
     { 
      System.out.println ("The data in particular row is : "+strLine); 
     } 
} 
+0

謝謝,它和我的代碼很相似。 – user3170143

+0

如果你認爲答案是有用的,然後投票增加我的聲譽 – Kick

1

首先,我會選擇不同的格式,爲您的文件,幾個空格很容易被錯誤輸入,所以只需粘貼一個空格或不同的字符。

這裏是一個字符串解析的小例子,其中我使用split方法拆分空間上的行,然後在最後檢查正確的標識符。如果匹配,那麼我從分離的數據中提取數據,並將它們存儲在字符串中。

// You fill this list from the file, I do it here for demonstration 
ArrayList<String> list = new ArrayList<String>(); 
list.add("name1 info A"); 
list.add("name2 info B"); 
list.add("name3 info C"); 
list.add("name4 info D"); 

// And this identifier is read from the user 
String identifier = "B"; 

for (int i = 0, len = list.size(); i < len; i++) { 
    String line = list.get(i); 
    String[] splitted = line.split("[ ]"); 
    if(splitted[2].equals(identifier)){ 
     String name = splitted[0]; 
     String info = splitted[1]; 
     // Here you can do what you want with the data, call your constructor or  something... 
    } 
} 
相關問題