当前位置: 首页 > 知识库问答 >
问题:

计算字符串出现次数并按其排序的简单方法

阎阎宝
2023-03-14

我正在查看冗余字符串列表,例如。

{ "One", "One", "One", "Two", "Three", "Three" }

计算出现次数的最佳方法是什么,然后创建一个按出现次数排序的非冗余字符串列表?

我想要的结果是这样一个列表:

{ "One", "Three", "Two" }

共有3个答案

冯元徽
2023-03-14

您可以创建一个Map,浏览您的列表,每次您遇到新出现的情况时,将其放入列表并将整数值设置为1,每次您遇到重复的值时,只需将该特定键的值增加1。

然后遍历并根据hashmap中的计数创建排序列表。

或者像其他人建议的那样,使用TreeMap将允许您排序而不是创建sepearet列表。

鲁熙云
2023-03-14

它可以在Java8中快速完成。

Map<String, Long> sortedByCountSet =  Stream.of("One", "One", "One", "Two", "Three", "Three")
            .collect(Collectors.groupingBy(str->str,TreeMap::new,Collectors.counting()));

System.out.println(sortedByCountSet);

此处输出:-

{一=3,三=2,二=1}

Map<String, Long> sortedByCountSet = Stream.of("One", "One", "One", "Two", "Three", "Three","Five","Five")
            .collect(Collectors.groupingBy(str->str, Collectors.counting()))
            .entrySet().stream().sorted(Comparator.comparing(Map.Entry::getValue))
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,(e1, e2) -> e1,LinkedHashMap::new));

输出:-

{2=1,5=2,3=2,1=3}

施德运
2023-03-14

您可以在这个问题的投票最多的答案中使用这个技巧,即如何根据地图的值对地图进行排序

下面是一个示例实现(我向比较器添加了泛型):

  • 将字符串/事件添加到哈希映射
public static void main(String[] args) {
    String[] strings = {"One", "One", "One", "Two", "Three", "Three"};

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

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

    ValueComparator<String, Integer> comparator = new ValueComparator<String, Integer> (map);
    Map<String, Integer> sortedMap = new TreeMap<String, Integer> (comparator);
    sortedMap.putAll(map);

    List<String> sortedList = new ArrayList<String> (sortedMap.keySet());

    System.out.println(sortedMap);
    System.out.println(sortedList);

}

static class ValueComparator<K, V extends Comparable<V>> implements Comparator<K> {

    Map<K, V> map;

    public ValueComparator(Map<K, V> base) {
        this.map = base;
    }

    @Override
    public int compare(K o1, K o2) {
         return map.get(o2).compareTo(map.get(o1));
    }
}
 类似资料:
  • 我需要返回一个字典,该字典计算预定列表中每个字母出现的次数。问题是我需要把大小写字母都算成一样,所以我不能用.low或.uper。 因此,例如,如果“t”是要搜索的字母,“This is a Python String”应该返回{nt':3}。 这是我目前所掌握的... 其中'letters'是条件,fullText是我正在搜索的字符串。 这里很明显的问题是,如果测试是“t”而不是“t”,我的代码

  • 问题内容: 我有一个大的文本文件正在读取,因此我需要找出几个单词出现的次数。例如,单词。我正在逐行执行此操作,每一行都是一个字符串。 我要确保我只算合法的-在中起不到作用。这意味着我知道我需要以某种方式使用正则表达式。到目前为止,我正在尝试的是: 我意识到正则表达式目前可能不正确,但我尝试过不这样做,而只是尝试查找单词的出现,并且我也得到了错误的数字。我给人的印象是,它将字符串分割成一个数组,并且

  • 本文向大家介绍计算字符串中子串出现的次数。相关面试题,主要包含被问及计算字符串中子串出现的次数。时的应答技巧和注意事项,需要的朋友参考一下 【参考答案】

  • 问题内容: 计算字符串中字符出现次数的最简单方法是什么? 例如,计算出现在其中的次数 问题答案: 返回sub范围中的子字符串不重叠的次数。可选参数并以片表示法解释。

  • 问题内容: 我需要计算一个字符在一个字符串中出现的次数。 例如,假设我的字符串包含: 我想找到逗号字符的数量,即3。以及沿逗号分割后的各个字符串的数量,即4。 我还需要验证每个字符串,即str1或str2或str3或str4不应超过15个字符。 问题答案: 我已经更新了这个答案。我喜欢更好地使用比赛的想法,但是比较慢: 如果您事先知道要搜索的内容,则使用正则表达式文字;如果不知道,则可以使用构造函

  • 问题内容: 我是Java字符串的新手,问题是我想计算字符串中特定单词的出现次数。假设我的字符串是: 现在,我也不想拆分它,所以我想搜索一个“雄猫”这个词。它在我的字符串中出现了两次! 我正在尝试的是: 它给了我46个计数器的价值!那么解决方案是什么? 问题答案: 您可以使用以下代码: 演示版 它匹配。 表示在找到匹配项时执行循环内给出的任何操作。并且我将by 的值递增,因此很显然,这给出了一个字符