Разбор текстового файла с использованием HashMap и List

У меня есть текстовый файл, например:

fruits bananna blackbery apple
vegetable carrot potato
cars toyota honda ww bmw

Мне нужна моя Java-программа, чтобы взять строку типа vegetable и отобразить следующие слова в строке. В этом случае программа отобразит carrot potato

У меня есть код ниже:

public static void ParseWithHashMap(String wordGiven) throws IOException {
 HashMap<string, arraylist<string="">> map = new HashMap<string, arraylist<string="">>();
 ArrayList<string> lemmes = new ArrayList<string>();
 FileInputStream fin = null;
 InputStreamReader isr = null;
 BufferedReader br = null;
 try {
 fin = new FileInputStream("test.txt");
 isr = new InputStreamReader(fin, "UTF-8");
 br = new BufferedReader(isr);
 String line = br.readLine();
 while (line != null) {
 String[] toks = line.split("\\s+");
 for (int i = 1; i < toks.length; i++) {
 lemmes.add(toks[i]);
 }
 map.put(toks[0], lemmes);
 line = br.readLine();
 }
 } finally {
 }
 System.out.println(map.get(wordGiven));
 }
</string></string></string,></string,>

Проблема в том, что при вводе fruits программа отобразит все слова из текстового файла, кроме первого слова каждой строки

bananna blackbery apple carrot potato toyota honda ww bmw

и я хочу показать мне слова, которые следуют за словом, которое я даю, в этом случае было бы

bananna blackbery apple

Что я делаю неправильно?

2 ответа

Вам нужно объявить/определить ваш ArrayList в цикле while while (line != null) {.

Причина того, что когда вы начнете добавлять данные в этот список, он будет накапливаться до конца вашего файла, который вам не нужен. Вместо этого вы просто хотите, чтобы он удерживал значения только для текущей строки.

Следовательно,

while (line != null) {
 ArrayList<string> lemmes = new ArrayList<string>();
 ...
</string></string>

Получите желаемые результаты.


Вы также можете использовать List#clear после добавления arraylist к map без изменения кода.

map.put(toks[0], lemmes);
lemmes.clear();

licensed under cc by-sa 3.0 with attribution.