2014-03-29 96 views
0

嗨我正在閱讀文本文件並將內容存儲在稱爲縮寫的數組中。我做了一個for循環來檢查給定的字符串是否在數組中,如果是的話,我想將下一個元素賦值給一個變量。訪問數組

這裏是我的代碼:

Scanner s = new Scanner(new File("C:\\Users\\Hass 2\\Dropbox\\work\\Java\\Assessment3\\abbreviations.txt")); 
    ArrayList<String> list = new ArrayList<String>(); 

    while (s.hasNext()) { 
     String line = s.next(); 
     String[] lineSplit = line.split(","); //split into two tokens 
     list.add(lineSplit[0]); //word 
     list.add(lineSplit[1]); //number 
} 

String [] abbreviations = list.toArray(new String[list.size()]); 
s.close(); 

System.out.println(Arrays.toString(abbreviations)); 
String test = "hello"; 
String abbreviatedWord = ""; 

     for(int i = 0; i < abbreviations.length; i++) { 

      if(test.equals(abbreviations[i])) { 
       //assign word to the abbreviated word 
       abbreviatedWord = abbreviations[i+1]; 

     } else { 
      abbreviatedWord = test; 
     } 
     } 
     System.out.println(abbreviatedWord); 
    } 

當我編譯並運行程序,我得到的輸出爲hello(存在於文本文件),而不是沿着下一個元素。

感謝您的幫助。

+0

顯示您的一些輸出 – redFIVE

+0

也可以向我們展示您的文本文件中的3個示例行? – Tdorno

回答

0

你需要找到單詞「你好」後打破for循環。

for(int i = 0; i < abbreviations.length; i++) { 

    if(test.equals(abbreviations[i])) { 
      //assign word to the abbreviated word 
      abbreviatedWord = abbreviations[i+1]; //potential arrayoutofbound exception 
      break; 

    } else { 
     abbreviatedWord = test; 
    } 
+0

另外,像其他人一樣,你可以使用hashmap。它會更有效率,並幫助您避免ArrayOutOfBound異常。 – Nikhil

0

分配abbreviatedWord後未歸還的問題在if條件中放入returnbreak語句。

for(int i = 0; i < abbreviations.length; i++) { 
      if(test.equals(abbreviations[i])) { 
       //assign word to the abbreviated word 
       abbreviatedWord = abbreviations[i+1]; //though this line will give you ArrayoutofBoundException 
       return ; 

     } else { 
      abbreviatedWord = test; 
     } 
     } 

看起來你知道Collections所以我建議在這樣的條件下使用HashMap。這裏是執行相同的邏輯

import java.io.File; 
import java.io.IOException; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.Scanner; 

public class FoudnNextWord{ 
    public static void main(final String[] args) throws IOException { 
     final Scanner s = new Scanner(
       new File(
         "C:\\Users\\Hass 2\\Dropbox\\work\\Java\\Assessment3\\abbreviations.txt")); 
     final Map<String, String> list = new HashMap<String, String>(); 
     while (s.hasNext()) { 
      final String[] line = s.next().split(","); 
      list.put(line[0], line[1]); 
     } 
     final String test = "hello"; 
     if (list.containsKey(test)) { 
      System.out.println("The next word is: " + list.get(test)); 
     } else { 
      System.out.println("The next word is " + test); 
     } 
    } 
} 
0

你「的(我」循環會當它通過對「好」的一個傳遞的所有輸入元素。 ,它設置abbreviatedWord到良好的價值,但隨後它通過對「壞」的,並重置abbreviatedWord測試

你可以試試:。

String abbreviatedWord = test; 
for(int i = 0; i < abbreviations.length; i++) { 
    if(test.equals(abbreviations[i])) { 
    //assign word to the abbreviated word 
    abbreviatedWord = abbreviations[i+1]; 
    } 
} 

你也應該考慮使用一個HashMap,那將是更有效

+0

你也可以按照Nikhil的建議休息一下,一旦找到結果,不值得繼續循環。 –