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

使用Stream[duplicate]将字符串中的字母映射到出现次数

东门理
2023-03-14

我有一个字符串s,我正在尝试使用流API将s中的每个字母映射到它在s中出现的次数。
例如,giraffe->{1,1,1,1,2,2,1}
我尝试使用的代码是:

String s = "giraffe";
int[] occurences = s.chars().map(c -> count(s, c)).toArray();

public int count(String text, char ch) {
    return (int) text.chars().filter(c -> c == ch).count();
}

但是我得到了不兼容的类型:在以int[]occurences=...开头的行中,从int到char的转换可能是有损的。我尝试了一些不同的变体,但没有任何效果。有什么想法吗?谢谢


共有1个答案

谢骏奇
2023-03-14

问题的真正原因是没有任何CharStream类。因此,s.chars()提供了一个intstream。因此,在map(c->count(s,c))中,c具有类型int。因此,您试图将int传递给count方法,该方法需要char。这会给出错误信息。int可以转换为char,但是有些位会被丢弃,这就是为什么转换必然是有损的。

解决方案1:告诉Java您的意思是进行这种有损转换。由于您知道C来自字符串中的char,因此再次将其转换回char不会造成任何损害。

    int[] occurences = s.chars().map(c -> count(s, (char) c)).toArray();

解决方案2:

public int count(String text, int ch) {
 类似资料:
  • 您能帮我找出更好的解决方案吗?下一种情况:Web元素属性以字符串形式收集,格式为: 目标:创建属性及其值的映射 。注意:属性中的值duplicates是可能的,例如“none”。

  • 我有一个javascript问题,对此我感到非常困惑 编写一个函数stringCase,该函数接受一个大小写字符混合的字符串,并根据字符串具有更多的字母大小写返回全大写或全小写的字符串。如果字符串的大小写字符相等,则将字符串转换为所有小写。不包括任何循环、长度属性或本机方法(例外:toLowerCase() 我可以立即想到一些解决这个问题的方法,比如使用循环检查每个字符,或者使用替换方法和正则表达

  • 问题内容: 当我用Java进行操作时,我在stdout中得到了很好的输出。在不干预标准输出的情况下,如何在变量中获得相同的a字符串表示形式?像什么? 问题答案: 使用。 所有的亦是在此之后是做头套下。地图的格式在中描述。 返回此映射的字符串表示形式。字符串表示形式由键值映射列表组成,这些键值映射由地图视图的迭代器返回,并用大括号(“ {}”)括起来。相邻的映射用字符“,”(逗号和空格)分隔。每个键

  • 本文向大家介绍java计算给定字符串中出现次数最多的字母和该字母出现次数的方法,包括了java计算给定字符串中出现次数最多的字母和该字母出现次数的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java计算给定字符串中出现次数最多的字母和该字母出现次数的方法。分享给大家供大家参考,具体如下: PS:这里再为大家推荐几款在线字符统计工具供大家参考: 在线字数统计工具: http://to

  • 嗨,我尝试将以下Source类映射到以下Destation类。我使用了以下映射以将字符串值映射到列表字符串。它没有正确映射。我需要知道如何使用Dozer将2个字符串值映射到一个目标字符串列表中。

  • 问题内容: 我的主字符串是“ hello Swift Swift和Swift”,子字符串是Swift。我需要获取子字符串“ Swift”在提到的字符串中出现的次数。 此代码可以确定模式是否存在。 现在我需要知道发生的次数。 问题答案: 一种简单的方法是分割,然后从零件数中减去1: 此代码打印3。 编辑: 在Swift 3语法之前,代码如下所示: