打印单个单词而不重复?

时间:2019-04-20 16:36:38

标签: java counter

我想列出一个文本文件中的每个唯一单词,以及在其中找到每个单词的次数。 我尝试使用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 个答案:

答案 0 :(得分:1)

我建议利用HashMap解决此问题。简而言之,HashMap是一个散列键的键值对,搜索复杂度为O(1)。

仅迭代单词列表一次,并继续将遇到的单词存储在HashMap中。当您遇到一个单词时,请检查它是否已经存在于HashMap中。如果不存在,则将其添加到地图中,并以key作为单词本身,并将value设为1。 如果存在alrady一词,则将该值增加1。

完成迭代后,HashMap将包含唯一单词及其数量的键值对!

以防万一,如果您不知道Java中的地图-https://www.javatpoint.com/java-hashmap

答案 1 :(得分:0)

您可以这样做:

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

答案 2 :(得分:0)

您需要使用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;
}