打印文件中不同单词的总数(区分大小写)

Print Total Number of Different Words (case sensitive) from a file

**在查看 Tormod 的回答并实施他的建议后进行编辑。

如标题所述,我试图在从命令行输入接收到文件名后打印不同单词的总数。我在尝试编译程序后收到以下消息:

注意:Project.java 使用未经检查或不安全的操作。 注意:使用 -Xlint:unchecked 重新编译以获取详细信息。

这是我的代码。非常感谢任何帮助:

import java.lang.*;
import java.util.*;
import java.io.*;

public class Project {

    public static void main(String[] args) throws IOException {

        File file = new File(args[0]);
        Scanner s = new Scanner(file);
        HashSet lib = new HashSet<>();

        try (Scanner sc = new Scanner(new FileInputStream(file))) {
            int count = 0;
            while(sc.hasNext()) {
                sc.next();
                count++;
            }
        System.out.println("The total number of word in the file is: " + count);
        }

    while (s.hasNext()) {

        String data = s.nextLine();
        String[] pieces = data.split("\s+");

        for (int count = 0; count < pieces.length; count++)
        {
        if(!lib.contains(pieces[count])) {
            lib.add(pieces[count]);
            }
        }
    }
    System.out.print(lib.size());
}
}

我会用一个HashSet来实现 添加所有的单词,然后读出大小。如果你想让它不区分大小写,只需将所有单词操作为大写或类似的东西。这会占用一些内存但是...

算法的一个问题是你只有一个 "words"。它只包含同一行的单词。所以你只计算同一行的相同单词。

HashSet按哈希值存储字符串,因此一个单词只存储一次。

构造:HashSet lib = new HashSet<>();

循环内部:if(!lib.contains(word)){lib.add(word);}

检查字数:lib.size()

for(String s : words) {
    if(s.equals(word))
        count++;
}

您正在将单词与空字符串进行比较,因为它是一个单词,所以它总是会是假的。

就像 Tormod 说的,最好是将单词存储在 HashSet 中,因为它不会保留重复项。然后读出它的大小。