2012-10-10 37 views
0

直到現在,我一直在逐行讀取帶有BufferedReader的文件,但是,現在我希望能夠只存儲該行上的第二個字。我把我的行存儲在一個hashmap中,以便查找。如何僅讀取每行上的第二個字Java

 int i=0; 

    HashMap<Integer, String> mapHash = new HashMap<Integer, String>(); 

    try { 
     BufferedReader in = new BufferedReader(new FileReader("file")); 
     String st; 


     while ((st = in.readLine()) != null) { 
      st = st.trim(); 
      //store the lexicon with position in the hashmap 
      mapHash.put(i, st); 
      i++; 

     } 
     in.close(); 
    } catch (IOException e) { 
    } 

任何人都可以幫我讀出每行上的第二個單詞嗎?

謝謝!

+3

使用['split'](http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang中。串))? –

+0

我建議使用'List'而不是'HashMap'。 –

+0

我稍後使用HashMap進一步查找和處理數據。對我來說,它似乎是最好的結構,直到現在,它一直很好。使用列表有什麼好處? – Bipa

回答

1

例如

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.StringTokenizer; 

//... 
try (BufferedReader in = new BufferedReader(new FileReader("file"));) { 
     Map<Integer, String> mapHash = new HashMap<>(); 
     int i = 0; 
     String st; 

     while ((st = in.readLine()) != null) { 
      st = st.trim(); 
      StringTokenizer tokenizer = new StringTokenizer(st); 
      int j = 0; 
      while (tokenizer.hasMoreTokens()) { 
       if (j == 1) { 
        mapHash.put(i, tokenizer.nextToken()); 
        break; 
       } else { 
        tokenizer.nextToken(); 
        j++; 
       } 
      } 
      //store the lexicon with position in the hashmap 
      i++; 
     } 
    } catch (IOException e) { 
     throw new RuntimeException(e); 
    } 
+0

這對我很有幫助。但它仍然佔據第三個字。在緩衝器讀取器中有沒有辦法告訴下一個線? – Bipa

+0

@喬 - 我糾正了代碼。現在應該沒問題。 – Jagger

+1

謝謝!所以,如果我決定讀第三個單詞,我改變j == 2?我仍然在搞清楚Java ... – Bipa

相關問題