java hashmap подсчет слов из текстового файла
Я пытаюсь написать код для чтения информации из текстового файла, мне нужно выяснить, сколько раз встречается каждое слово, разделенное пробелом. Затем мне нужно вывести в алфавитном порядке с подсчетом каждого слова. Я ищу использовать TreeMap, keySet() и итератор. Мой код очень неполный, и я застрял.
import java.util.HashMap;
import java.util.Map
public class WordCount<E extends Comparable<E>> {
private static Map<String, Integer> map = new HashMap<String, Integer>();
static {
fillMap(map, "Alice.txt");
}
private static void fillMap(Map<String, Integer> map, String fileName) {
}
}
1 ответ
Решение
Это именно тот код, который вы просили. Это сохранит каждое слово и посчитает их. если полученное слово не существует, оно добавит его на карту, а если увеличит, то увеличит его значение. В конце он напечатает все ключи и значения. используйте его, если у вас возникнут вопросы, спросите.
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
/*
* @author Mr__Hamid
*/
public class overFlow {
public static void main(String[] args) throws FileNotFoundException, IOException {
Map m1 = new HashMap();
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
String[] words = line.split(" ");//those are your words
for (int i = 0; i < words.length; i++) {
if (m1.get(words[i]) == null) {
m1.put(words[i], 1);
} else {
int newValue = Integer.valueOf(String.valueOf(m1.get(words[i])));
newValue++;
m1.put(words[i], newValue);
}
}
sb.append(System.lineSeparator());
line = br.readLine();
}
}
Map<String, String> sorted = new TreeMap<String, String>(m1);
for (Object key : sorted.keySet()) {
System.out.println("Word: " + key + "\tCounts: " + m1.get(key));
}
}
}