Java - 计算两个文档中的单词

时间:2010-12-24 03:34:19

标签: java data-structures

3 - 现在我必须查看当前文件中是否有任何单词来自上述条款,如果是,那么我会计算。

现在这是我的问题,我坚持第3步:(

我知道如何使用TreeMap计算单词(treemap.containskey等),但它是全局计数而不是每个文件的本地计数:(

任何伪代码?

3 个答案:

答案 0 :(得分:0)

一种可能性是为每个文件设置一个映射,例如再次存储在地图中。

答案 1 :(得分:0)

我不清楚,但我假设您的“两份文件”指的是文件A ,其中包含您所有可能的条款感兴趣的事件计数和文档B ,其中包含 对出现次数感兴趣的部分或全部条款,前提是它们也出现在文档A中。

我不确定这是你想要的,但是从你说出问题的方式来看,这是我最好的猜测。

您的最终结果可能是Map(如果您愿意,可以使用TreeMap),其中字符串是单词,Integer是出现次数。

因此,您首先要阅读文档A,为每个单词执行map.put(word, 0);。每个重复的单词将替换地图中的现有条目。你可以先测试存在,但我不认为这会产生很大的性能差异。

您现在已经完成了第1步和第2步。

现在你需要仔细阅读你的文件B和每一个字:

  1. 检查它在地图中的存在
  2. 如果存在,请递增值
  3. ie:if map.containsKey(word) map.put(word, map.get(word) + 1)

    您现在已经完成了第3步,并且地图中只包含文档A中包含的单词,以及它们在文档B中的出现次数。

    如果我误解了你的要求,我相信你可以适应它。

    编辑

    如果您只想计算一个文档中的单词,则伪代码变为:

    for (word)
        if (map.containsKey(word))
            map.put(word, map.get(word) + 1)
        else
            map.put(word, 1)
    

    即,您点击的每个单词都会将其计数加1。如果在你的地图中用一个单词初始化之前没有点击该单词。

    在此过程结束时,您有一张地图,其中包含文档中的每个单词及其出现次数。

答案 2 :(得分:0)

他在本主题中提出了同样的问题:Java loop and increment problem

假设你每行都有一个单词,文件的最后一行包含“-1”来打破循环..

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;

public class StackOverflow {

@SuppressWarnings("unchecked")
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    Map<String, Integer> countedWords = new HashMap<String, Integer>();
    int numberOfWords = 0;
    String word = "";
    while (true) {
        word = scanner.nextLine();
        if (word.equalsIgnoreCase("-1")) {
            break;
        }
        if (countedWords.containsKey(word)) {
            numberOfWords = countedWords.get(word);
            countedWords.put(word, ++numberOfWords);
        } else {
            countedWords.put(word, 1);
        }
    }
    Iterator it = countedWords.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry pairs = (Map.Entry)it.next();
        System.out.println(pairs.getKey() + " = " + pairs.getValue());
    }
}
}