Java 8:使用字符串的字符数创建 HashMap

2023-12-02

想知道是否有比计算给定字符串的字符数更简单的方法,如下所示?

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);

Simplest way to count occurrence of each character in a string, with full Unicode support (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) Java 8 version with full Unicode support is at the end of the answer.

Output

{A=3, B=3}

UPDATE:对于 Java 8+(不支持补充平面中的字符,例如表情符号):

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接口,因此它不会显示在 javadoc 中String在 Java 8 中,显示为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 支持,包括。补充平面,我们可以使用codePoints()String(int[] codePoints, int offset, int count)构造函数,在 Java 8 中:

Map<String, Long> charCount = word.codePoints()
        .mapToObj(cp -> new String(new int[] { cp }, 0, 1))
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 8:使用字符串的字符数创建 HashMap 的相关文章

随机推荐

  • 互相关

    我一直在尝试找到时移信号响应与作为参考的另一个信号响应之间的互相关性 但发现很难使我的时移反映在 xcorr 函数中 matlab代码粘贴在下面 如果有人能就如何实现xcorr函数提出建议 我将不胜感激 这样我就可以确定两个信号响应相关的时
  • 使用 [].replace 复制数组

    我有一堂课 我正在使用Array shift实例变量上的实例方法 我以为我制作了实例变量的 副本 但事实上我没有并且shift实际上是在改变实例变量 例如 在我期望得到之前 foo bar baz 两次均给出以下信息 class Foo a
  • 使用带有进度报告的 C# 提取 ZipFile

    谁能告诉我是否有可能 如果有的话给出一个例子 如何让进度条 如果可能的话还有状态标签 显示使用 ZipFile Ionic zip http dotnetzip codeplex com 我的 WinForm 在将 ZIP 文件从我选择的路
  • Python-获取日期格式[重复]

    这个问题在这里已经有答案了 我获取一个字符串形式的日期 然后将其解析为日期时间对象 有什么方法可以检查对象的日期格式是什么 假设这是我正在创建的对象 modified date parser parse 2015 09 01T12 34 1
  • 局部变量赋值的退出状态错误

    下面的例子展示了如果temp file被制作local作为同一行的一部分mktemp被调用 然后使用检索退出状态 始终为零 无论命令成功还是失败 mktemp xyz使用它总是会失败 如果temp file被制作local提前然后 退出状态
  • 对目标 c 中的负数和正数进行排序

    我通过网络服务列出了物品的数量百分比 我得到的响应是类似于下面代码的字典数组 我需要它以排序的格式 NSArray numberArray NSArray arrayWithObjects NSDictionary dictionaryWi
  • 在 Java Swing 中向 JPanel 添加按钮

    我将 JLabel 和 JCombobox 附加到 JPanel 这工作正常 但是当我向其中添加另外两个按钮时 我看不到这些按钮 下面是我的代码 JPanel jPanel new JPanel jPanel setLayout null
  • 从 ASP.NET Web API 中的控制器返回二进制文件

    我正在使用 ASP NET MVC 的新 WebAPI 开发一个 Web 服务 该服务主要提供二进制文件 cab and exe files 以下控制器方法似乎有效 这意味着它返回一个文件 但它将内容类型设置为application jso
  • 如何将原始 POST 数据传递到 urllib3 中?

    尝试使用 urllib3 发布 JSON 编码数据 只是希望我的 POST 有效负载是原始 JSON 字符串 内容类型为 application json 我只是不知道该怎么做 urllib3 文档描述了在 字段 中发布数据 即带有 键 值
  • 条件长度 > 1 并且 if else 语句中仅使用第一个元素

    pred data frame seq 1 100 by 2 obs data frame seq 1 100 by 3 pr data frame seq 1 200 by 4 for i in 1 dim pred 2 if pr i
  • 从 Pyscripter 中的函数调用时记录不写入文件

    目前 如果我从 python 命令行运行以下代码 它将写入由filename正如预期的那样 import logging def test logging basicConfig format asctime s message s dat
  • 带有 ManagedBeans 的 Primefaces 总是返回 null [重复]

    这个问题在这里已经有答案了 我有个问题 我有一个表格 通过将输入发送到 bean 进行调试 在 bean 对象中始终为 null 你能帮我解决这个问题吗 这里是代码
  • 代码仅从 Firebase 中的数据检索一个值

    正如标题所示 我正在尝试从 firebase 数据库检索一些数据 但我的代码无法正常工作 我在 帖子 中有三个孩子 我猜这就是你对他们的称呼 名为 标题 描述 和 用户名 我试图获取所有这些孩子并将它们附加到一个变量中以便稍后使用它们 但它
  • iCal 格式 - 存储事件创建者

    我目前正在编写一个大致基于 iCalendar 标准的日程安排应用程序 有谁知道我可以在哪个属性中存储活动创建者的信息 通过浏览 iCalendar RFC 2445 我找到了这个属性 组织者 即使活动创建者是唯一参与活动的人 我是否可以将
  • 内存布局意味着Go中[]T无法转换为[]接口?

    所以我一直在阅读这两篇文章和这个答案 无法将 string 转换为 interface 表示需要更改内存布局 http jordanorelli com post 32665860244 how to use interfaces in g
  • 如何在移动设备的 Facebook 即时游戏中创建 Phaser 按钮

    我正在尝试在移动设备上使用 Phaser 2 CE 创建一个按钮 但它不会触发 即使它在桌面上运行良好 整个代码也会打开我的 github 存储库但目前我只能显示一个图像 如下面的代码所示 var game new Phaser Game
  • PROLOG 打印以 7 结尾且其数字之和大于 100 的数字

    我需要创建一个谓词来接收数字列表并仅打印以 7 结尾且其数字之和大于 100 的数字 我为分离做了谓词 但我需要帮助将两个谓词合并起来 我的意思是这两个谓词进入一个唯一的谓词 这就是我到目前为止所做的 sum of digits great
  • 如何导入 java 的 multimap?

    这有点愚蠢 但我该如何安装MultiMap 我需要一种将多个值存储到键的方法 但我的地图实现无法正常工作 那堂课 MultiMap 不是 Java 标准库的一部分 它是一部分阿帕奇共享区 一组独立的实用程序类 许多 Java 开发人员认为很
  • 如何使用非树数据创建 d3.js 可折叠力布局?

    我有一个 d3 力定向布局 其中的数据具有下面类似的结构 是否可以应用可折叠力布局 例如http bl ocks org mbostock 1062288到它 我希望单击时折叠 展开节点 nodes x 469 y 410 x 493 y
  • Java 8:使用字符串的字符数创建 HashMap

    想知道是否有比计算给定字符串的字符数更简单的方法 如下所示 String word AAABBB Map