java边学边练之String,Number,Math(1)计算字符串中重复字符
2022/1/27 11:36:03
本文主要是介绍java边学边练之String,Number,Math(1)计算字符串中重复字符,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
以下是我自己的的实现方式,最最最笨的方法!!!
public class demo { public static void main(String[] args) { String str = "gfhgdebhjf"; char[] ch = str.toCharArray(); for(int i= 0; i < ch.length; i ++){ char c = ch[i]; for(int j = i+1; j<ch.length; j++ ){ if(c == ch[j]){ System.out.println(c); } else{ continue; } } } } } 参考答案给了两种方法: (1)
public Map<Character, Integer> countDuplicateCharacters(String str) {
Map<Character, Integer> result = new HashMap<>();
// or use for(char ch: str.toCharArray()) { ... }
for (int i = 0; i<str.length(); i++) {
char ch = str.charAt(i);
result.compute(ch, (k, v) -> (v == null) ? 1 : ++v);
}
return result;
}
这个方法的主要实现思路是:将字符和它在字符串中出现的次数(利用HashMap的方式)存成键值对。
其中,你需要了解Java中的HashMap, (hashmap 是java提供的一种键值对的存储形式,其中,key 应该唯一,key和value都可以为空,指定key的value可以更改(采用compute方法)。
并且,需要熟知compute 方法,参考:Java HashMap compute() 方法 | 菜鸟教程 (runoob.com),补充说明:当一个空的hashMap使用compute方法时,会自动添加key和value。
(2)
public Map<Character, Long> countDuplicateCharacters(String str) {
Map<Character, Long> result = str.chars()
.mapToObj(c -> (char) c)
.collect(Collectors.groupingBy(c -> c, Collectors.counting()));
return result;
}
这个方法主要是使用java8新增的流来实现。
第一眼看到这个答案,我的大脑的第一反映是:我不会!!!
经过查阅相关资料了解流是什么?
流的概念很广泛,参考:Java8系列--Java Stream入门篇(什么是Stream)_高自强的博客-CSDN博客_stream是什么,已经解决了本题中流的疑惑。
用一句话概括:流就是集合和lambda表达式的合体,主要解决数据的筛选和过滤。
在此答案中,首先使用string的chars()方法将string类型的变量转换成IntStream,再通过IntStream的mapToObj()方法结合lambda表达式(c->(char)c )来将IntStream转换成Stream<Charater>
(未完待学习。。。。Java 的stream)
这篇关于java边学边练之String,Number,Math(1)计算字符串中重复字符的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)