Я хочу перечислить каждое уникальное слово в текстовом файле и сколько раз каждое слово встречается в нем.
Я пытался использовать цикл if, но не знаю, как удалить уже перечисленные слова после их подсчета.
for (int i = 0; i < words.size(); i++) {
count = 1;
//Count each word in the file and store it in variable count
for (int j = i + 1; j < words.size(); j++) {
if (words.get(i).equals(words.get(j))) {
count++;
}
}
System.out.println("The word " + words.get(i) + " can be
found " + count + " times in the file.");
}
Содержимое текстового файла «Hello world. Hello world.», и программа напечатает следующее:
The word Hello can be found 2 times in the file.
The word world can be found 2 times in the file.
The word Hello can be found 1 times in the file.
The word world can be found 1 times in the file.
Возможный дубликат Как посчитать количество вхождений каждого слова?




Вы можете сделать это:
public void printWordOccurence(String filePath) throws FileNotFoundException {
if (filePath.isEmpty())
return;
File file = new File(filePath);
Scanner input = new Scanner(file);
HashMap<String, Integer> wordOccurence = new HashMap<>();
while (input.hasNext()) {
wordOccurence.merge(input.next(), 1, Integer::sum);
}
for (String word : wordOccurence.keySet()) {
System.out.println(word + " appears " + wordOccurence.get(word) + " times");
}
}
вместо того, чтобы писать if-else в цикле while, вы можете использовать метод merge интерфейса Map, представленный в Java 8.
теперь вы можете использовать ссылку на метод Integer::sum вместо (val1, val2) -> val1 + val2 :)
Я бы предложил использовать HashMap для решения этой проблемы. Проще говоря, HashMap — это пара ключ-значение, которая хеширует ключи и имеет сложность поиска O(1).
Повторите список слов только один раз и продолжайте сохранять найденное слово в HashMap. когда вы встречаете слово, проверьте, существует ли оно уже в HashMap. Если он не существует, добавьте его на карту с ключом как само слово и значением как 1. если слово уже существует, увеличьте значение на 1.
После завершения итерации HashMap будет содержать пары ключевых значений уникальных слов и их количество !!
на всякий случай если вы не в курсе про карты в java - https://www.javatpoint.com/java-хэшкарта
Вам нужно использовать ArrayList для хранения уже найденных слов, а после этого вам нужно проверить каждое слово в файле, присутствует ли оно в ArrayList или нет. Если слово присутствует внутри ArrayList, вам нужно игнорировать это слово. В противном случае добавьте это слово в ArrayList.
Пример кода для вас:
ArrayList<String> found_words=new ArrayList<String>();
public static void main(String arguments[])
{
String data = ""; //data from your file
String[] words=data.split("\\s"); //split the string into individual words
for(int i=0;i<words.length;i++)
{
String current_word=words[i];
if (!is_present(current_word))
{
found_words.add(current_word);
int count=1;
for(int j=i+1;j<words.length;j++)
{
if (words[j].equals(words[i]))
++count;
}
System.out.println("The word "+current_word+" can be found "+count+" times in the file.");
}
}
}
static boolean is_present(String word)
{
for(int i=0;i<found_words.size();i++)
{
if (found_words.get(i).equals(word))
return true;
}
return false;
}
что за тип
words?