Разбор текстового файла с использованием 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.