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

时间:2017-11-23 21:13:35

标签: java fileinputstream

**在审核了Tormod的回答并实施他的建议后编辑。

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

您使用该算法遇到的一个问题是您只有一个“单词”。它只保持同一行的单词。所以你只计算同一行的相同单词。

HashSet 按字节值存储字符串,因此只存储一个字。

构造:HashSet lib = new HashSet&lt;&gt;();

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

检查字数:lib.size()

答案 1 :(得分:0)

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

你正在将这些单词与一个空字符串进行比较,因为它是一个单词,它总是会被假的。

与Tormod一样,最好的方法是将单词存储在HashSet中,因为它不会保留重复项。然后读出它的大小。