java - 如何比较输入文本中单词的长度并根据长度值排序

标签 java sorting hashmap

我有一串单词,我想根据它们的长度排序返回。有些单词重复多次,因此我使用 HashMap 返回单词及其计数:

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

for (String s : fragments) {
    if (map.containsKey(s)) {
        map.put(s, map.get(s) + 1);
    } else {
        map.put(s, 1);
    }

}

如何使用它返回每个单词的长度并将它们从最长到最短排序?

编辑: 例如,如果输入是字符串

"From the torrent, or the fountain,From the red cliff of the mountain"

我做了一个简单的循环:

for (int i = 0; i < fragments.length; i++) {
    System.out.println(fragments[i]+" " +fragments[i].length());
}

输出是:(完整输出re:@Pshemo)

from 4
the 3
or 2
the 3
the 3
red 3
cliff 5
of 2
the 3
mountain 8

等等。它是未排序的,并且每次看到单词时都会重复像“the”这样的单词。我不想重复重复的内容,并将单词从最长到最短进行排序。

我想要的输出应该是:

mountain 8
cliff 5
from 4
the 3
red 3
of 2
or 2

最佳答案

使用自定义比较器:

public static void main(String[] args) {
    String phrase = "From the torrent, or the fountain, From the red cliff of the mountain";
    //or whatever method of getting the individual words you want.
    //I just chose StringTokenizer (obviously)
    StringTokenizer st = new StringTokenizer(phrase, " ,");
    TreeSet<String> ts = new TreeSet<>(new Comparator<String>() {

        @Override
        public int compare(String s1, String s2) {
            int retVal = Integer.compare(s1.length(), s2.length());
            if(retVal == 0){
                retVal = s1.compareTo(s2);
            }
            return retVal;
        }
    });
    while(st.hasMoreTokens()){
        ts.add(st.nextToken());
    }
    for(String s : ts.descendingSet()){
        System.out.println(s + " " + s.length());
    }
}

它甚至可以按字母顺序排列相同长度的单词:-)

关于java - 如何比较输入文本中单词的长度并根据长度值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22519317/

相关文章:

java - 将 TextView 设置为 TableRow,IllegalStateException - Android

sorting - 自定义比较器 - Java

python - 如何按特定字符的计数对字符串列表进行排序?

java - 如何在没有双 for 循环的情况下使用 HashMap 填充二维数组

java - 使用值从 HashMap 中获取键

java - 如何在 Selenium 网格中执行拖放

java - 子类初始化的模式

java - 我可以使用在 Java 7 中编译的 jar 作为针对 Java 6 编译的项目中的依赖项吗?

javascript - 在 Rally js "query"api 中,无法对已阻止​​进行排序

java - 在 Java 中将第五项插入到 hashmap 时出现错误