获得独特的字符串并按字母顺序排序并获得单词的频率

时间:2014-12-06 23:36:59

标签: java arrays string

我有一个包含字符串的String数组(没有标点符号的单词,全部小写)。 我需要做的是获取所有这些字符串,并以最高频率按字母顺序存储它们。例如,输出应该是这样的: 它 - 2 - 2 - 2 次-2 是 - 2 最好的 - 1 最糟糕的 - 1

我的数组中的字符串数量超过200个字符串。 我将我的字符串存储在名为IndividualWords的数组中,如下所示:

    String[] IndividualWords = stringfrominterface.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+");;
        ArrayList <String> uniquestrings = new ArrayList<>();


for(int i =0; i < IndividualWords.length ; i++){
            if(!uniquestrings.contains(IndividualWords[i])){
                uniquestrings.add(IndividualWords[i]);
            }
        }

问题是我不知道该怎么做。我知道如何获得独特的单词,但无法真正找到方法或想出一种方法来获取单词的频率并按字母输出它们......

1 个答案:

答案 0 :(得分:0)

这是一个解决方案:

private static class WordComparator implements Comparator<String> {
    Map<String, Integer> map;

    public WordComparator(Map<String, Integer> map) {
        this.map = map;
    }

    public int compare(String o1, String o2) {
        return -1 * Integer.compare(map.get(o1), map.get(o2));
    }

}

public static void main(String[] args) {

    String[] IndividualWords = new String[] { "test", "test", "ok", "ok1", "ok1", "ok1", "ok1" };
    Map<String, Integer> wordMap = new TreeMap<String, Integer>();
    for (String word : IndividualWords) {
        Integer occurence = wordMap.get(word);
        wordMap.put(word, occurence == null ? 1 : occurence+1);
    }
    System.out.println("BEFORE: " +wordMap);
    TreeMap<String, Integer> sortedMap = new TreeMap<String, Integer>(new WordComparator(wordMap));
    sortedMap.putAll(wordMap);
    System.out.println("AFTER: " +sortedMap);

}

这很有趣;)