当前位置: 首页 > 面试题库 >

Java8:使用字符串的字符数创建HashMap

程项禹
2023-03-14
问题内容

想知道有没有比如下计算给定字符串的字符数更简单的方法?

String word = "AAABBB";
    Map<String, Integer> charCount = new HashMap();
    for(String charr: word.split("")){
        Integer added = charCount.putIfAbsent(charr, 1);
        if(added != null)
            charCount.computeIfPresent(charr,(k,v) -> v+1);
    }

    System.out.println(charCount);

问题答案:

具有完全的Unicode支持(Java 11+)1的最简单的方法来计算字符串中每个字符的出现次数:

String word = "AAABBB";
Map<String, Long> charCount = word.codePoints().mapToObj(Character::toString)
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(charCount);

1)答案的结尾是具有完整Unicode支持的Java 8版本。

输出量

{A=3, B=3}

更新: 对于Java 8+(不支持补充平面中的字符,例如emoji):

Map<String, Long> charCount = IntStream.range(0, word.length())
        .mapToObj(i -> word.substring(i, i + 1))
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

更新2: 同样适用于Java 8+。

我误会了,以为codePoints()它是在Java
9之前才添加的。它是在Java
8中添加到CharSequence接口的,因此它不会String在Java
8 中的Javadoc 中显示,而在Java
9中为Javadoc的更高版本显示。



但是,Character.toString​(int codePoint)直到Java
11才添加该方法,因此要使用该Character.toString​(char c)方法,我们可以chars()在Java
8中使用:

Map<String, Long> charCount = word.chars().mapToObj(c -> Character.toString((char) c))
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

或完整的Unicode支持,包括。在Java
8中,我们可以使用补充平面codePoints()String(int[] codePoints, int offset, int count)构造函数:

Map<String, Long> charCount = word.codePoints()
        .mapToObj(cp -> new String(new int[] { cp }, 0, 1))
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));


 类似资料:
  • 在这个问题之前,我先要说明一个事实,那就是我学习编程才一个月,而这个学校的作业却把我难住了。具体地说,它是摩尔斯电码到英语翻译器(反之亦然)...这是我被困住的部分:

  • 我想解组一个具有' 有没有办法在不使用替换/replace的情况下取消对字符串的排序?

  • 问题内容: 我知道问题的标题不是很清楚,对此感到抱歉,不知道如何提出。我有一个非常基本的Java实现问题,我想着重于应用程序性能,但是它也涉及Java中的String创建模式。 我了解Java中字符串的不变性概念。我不确定的是,我在某处读到以下内容不会创建两个不同的String对象: 我想知道Java是怎么做到的?它实际上是否在程序存储器中寻找一个String值并检查其是否存在,如果不存在则创建一

  • 问题内容: 我在PostgreSQL中有一个表,其中包含: 是类型,它包含具有正确顺序的该行的父记录列表。 家长:然后再 如何编写一个查询,该查询对于任何给定的ID都会生成其父母姓名的字符串? 例如: :。 :。 :。 编辑: 如果可能的话,我希望请求的ID总是会出现。 :。 :。 :。 :。 问题答案: 您可以结合使用诸如generate_subscripts和array之类的多项操作来获得结果

  • 问题内容: 我有一个字符串形式: 依此类推(长度会有所不同)。由此创建字典的最简单方法是什么? 我知道我可以拆分,但是我无法获得正确的语法。如果我分开,那么我如何将这两个部分结合在一起? 对此进行迭代似乎很痛苦。 问题答案: 编辑:下一个解决方案是当您想要将值作为整数,我认为这是您想要的。

  • 问题内容: 我有一个使用UTF-8字符串输出文本表的程序,并且我需要测量字符串使用的等宽字符单元数,以便正确对齐它。如果可能的话,我想使用标准功能。 问题答案: 来自Unix / Linux的UTF-8和Unicode常见问题解答 : 可以使用C以可移植的方式在C中计算字符数。只要已选择适当的语言环境,此方法就可以与其他支持的编码一样适用于UTF-8。计算UTF-8字符串中字符数的一种硬连接技术是