当我在HashMap上打印所有值时,打印出一个奇怪的数字。为什么?

时间:2018-05-05 22:44:14

标签: java regex hashmap hashset

我正在编写一个程序来读取文本文件并计算每个单词出现的次数。程序应该输出比用户给出的某个阈值更频繁使用的单词。为了避免枯燥的结果,我将与英语中最常用的100个单词的提供列表进行比较。

添加到HashMap:

try {
    // commonHashMap Filled
    Scanner sc = new Scanner(new File("commonwords.txt"));
    sc.useDelimiter("[^a-zA-Z']");
    String str;
    while (sc.hasNext()) {
        str = sc.next().toLowerCase(Locale.ENGLISH);
        commonHashMap.put(str, 1);
    }
    sc.close();


    // bookHashMap Filled
    sc = new Scanner(new File(book));
    sc.useDelimiter("[^a-zA-Z']");

    // Add the non-common words in the book to HashMap.
    while(sc.hasNext()) {
        str = sc.next().toLowerCase(Locale.ENGLISH);

        if (!commonHashMap.containsKey(str)) {

            if (bookHashMap.containsKey(str)) {
                bookHashMap.put(str, bookHashMap.get(str)+1); }
            else {
                bookHashMap.put(str, 1); }
        }
    }
    sc.close();
}

显示:

Iterator<Map.Entry<String, Integer>> iterator = bookHashSet.iterator();

while(iterator.hasNext()) {

    Map.Entry<String, Integer> x = iterator.next();

    if (iterator.hasNext()) {

        String key = x.getKey();
        int value = x.getValue();

        if (value > thresholdValue) {
            System.out.println(key + ": " + value); 
        }
    }
}

输出:

1) "The Adventures of Tom Sawyer" by Mark Twain
2) "Tale of Two Cities" by Charles Dickens
3) "The Odyssey" by Homer
Choice Book: 1
Enter Threshold Value: 200
: 27213
don't: 222
tom: 695
huck: 224
me: 212

“27213”来自哪里?

1 个答案:

答案 0 :(得分:0)

我刚试过你的代码,我看到它正在计算空白区域。只需使用它来确保它只计算单词:

if (str.length() != 0)

这将查看字符串长度是否为0,这意味着它不包含任何单词。您还可以使用trim()获得更好的结果。