Java - Hashmapping文本文件

时间:2013-12-12 02:18:54

标签: java hashmap

请原谅我的无知,我一直在困惑这一点。

我有一个巨大的.txt文件,主要包含字母。我需要创建HashMaps来存储单词长度,单词字符和单词计数...我必须打印出发生超过三次的最长单词并显示它发生了多少次。 我在想这样的事情

private void readWords(){ 
    BufferedReader in = new BufferedReader(new FileReader("text.txt"));

Map<Integer, Map<String, Integer>>
}

问题是我不知道如何保存到HashMap,有人可以帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class HashMapExample {

static String fileName = "text.txt";
private static Scanner input;

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

    input = new Scanner(new File(fileName));

    Map<String, Integer> map = new HashMap<String, Integer>();

    while (input.hasNext()) {
        String word = input.next();
        if (map.containsKey(word)) {
            int temp = map.get(word) + 1;
            map.put(word, temp);
        } else {
            map.put(word, 1);
        }
    }

    System.out.println("printing longest word(s) with word count < 3");
    System.out.println("");

    // iterate through the key set and display word, word length and values
    System.out.printf("%-25s\t%-25s\t%s\n", "Word", "Word Length", "Count");

    String longest = getLongest(map);

    int valueOfLongest = 0;
    if (!longest.equals("")) {
        valueOfLongest = longest.length();
        System.out.printf("%-25s\t%-25s\t%s\n", longest, longest.length(), map.get(longest));
        map.remove(longest);
    }


    boolean isAllRemoved = false;
    while (!isAllRemoved) {
        isAllRemoved = false;
        longest = getLongest(map);
        if (!longest.equals("") && longest.length() == valueOfLongest){
            System.out.printf("%-25s\t%-25s\t%s\n", longest, longest.length(), map.get(longest));
            map.remove(longest);
        } else
            isAllRemoved = true;
    }

    System.out.println("");
    System.out.println("printing next longest word(s) with word count > = 3");
    System.out.println("");

    // iterate through the key set and display word, word length and values
    System.out.printf("%-25s\t%-25s\t%s\n", "Word", "Word Length", "Count");

    String nextLongest = getNextLongest(map, valueOfLongest);

    int valueOfNextLongest = 0;
    if (!longest.equals("")) {
        valueOfNextLongest = nextLongest.length();
        System.out.printf("%-25s\t%-25s\t%s\n", nextLongest, nextLongest.length(), map.get(nextLongest));
        map.remove(nextLongest);
    }

    boolean isNextLongest = false;
    while (!isNextLongest) {
        isNextLongest = true;
        nextLongest = getNextLongest(map, valueOfLongest);
        if (!(nextLongest.equals("")) && nextLongest.length() ==  valueOfNextLongest) {
            System.out.printf("%-25s\t%-25s\t%s\n", nextLongest, nextLongest.length(), map.get(nextLongest));
            map.remove(nextLongest);
            isNextLongest = false;
        }

    }

}

public static String getLongest(Map<String, Integer> map) {
    String longest = "";
    for (Map.Entry<String, Integer> entry : map.entrySet()) {
        String key = (String) entry.getKey();
        if (longest.length() < key.length() && map.get(key) < 3) {
            longest = key;
        }

    }

    return longest;
}

public static String getNextLongest(Map<String, Integer> map,
        int valueOfLongest) {
    String nextLongest = "";
    for (Map.Entry<String, Integer> entry : map.entrySet()) {
        String key = (String) entry.getKey();
        if (valueOfLongest > key.length() && nextLongest.length() < key.length() && map.get(key) >= 3) {
            nextLongest = key;
        }

    }

    return nextLongest;
}
}

答案 1 :(得分:0)

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

import com.google.common.collect.HashMultiset;
import com.google.common.collect.Multiset;

public class CountWord {
    public static void main(String args[]) throws IOException {
        FileReader fr = new FileReader("c:/a.txt");
        BufferedReader br = new BufferedReader(fr);

        // init the longest size 0
        int longestSize = 0;
        String s = null;
        // may be some word have the same length
        Set<String> finalAnswerSet = new HashSet<String>();
        Multiset<String> everyWordSet = HashMultiset.create();
        while (br != null && (s = br.readLine()) != null) {
            // put every word into the everyWordSet
            everyWordSet.add(s);
            // we care about the word appear 3+ times
            if (everyWordSet.count(s) > 3) {
                if (s.length() > longestSize) {
                    //if s'length is the longest,clear the finalAnswerSet and put s into it
                    longestSize = s.length();
                    finalAnswerSet.clear();
                    finalAnswerSet.add(s);
                } else if (s.length() == longestSize) {
                    // finalAnswerSet may contains multi values
                    finalAnswerSet.add(s);
                }
            }
        }
        // and now we have the longestSize,and finalAnswerSet contains the answers,let's check it
        System.out.println("The longest size is:" + longestSize);
        for (String answer : finalAnswerSet) {
            System.out.println("The word is :" + answer);
            System.out.println("The word appears time is:" + everyWordSet.count(answer));
        }
        //don't forget to close the resource
        br.close();
        fr.close();
    }
}