Печать отдельных слов без повторения? - PullRequest
0 голосов
/ 20 апреля 2019

Я хочу перечислить каждое уникальное слово в текстовом файле и сколько раз каждое слово встречается в нем.Я попытался использовать цикл 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.

Ответы [ 3 ]

1 голос
/ 20 апреля 2019

Я бы предложил использовать HashMap для решения этой проблемы.Проще говоря, HashMap - это пара значений ключей, которая хэширует ключи и имеет сложность поиска O (1).

Повторяйте список слов только один раз и продолжайте хранить найденное слово в HashMap.когда вы встретите слово, проверьте, существует ли оно уже в HashMap.Если он не существует, добавьте его на карту с ключом в качестве самого слова и значением как 1. если слово alrady существует, увеличьте значение на 1.

После завершения итерации HashMap будет содержать ключпары значений уникальных слов против их количества !!

на всякий случай, если вы не знаете карты в java - https://www.javatpoint.com/java-hashmap

0 голосов
/ 20 апреля 2019

Вам нужно использовать 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;
}
0 голосов
/ 20 апреля 2019

Вы можете сделать это:

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");
        }
    }
...