输入字符串,包含数字,大小写字母,编程输出出现做多的数字的和
Posted zclun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入字符串,包含数字,大小写字母,编程输出出现做多的数字的和相关的知识,希望对你有一定的参考价值。
题目描述:
输入字符串,包含数字,大小写字母,编程输出出现做多的数字的和。
思路:
1.创建输入对象
2.输入字符串
3.利用正则将字母分离出,剩余的每一个字符串即为待统计的每一个数字,存入字符串数组中
4.遍历数组,拿到字符串,存入创建的hashMap中,且键为该字符串,值为出现的次数;这里我使用的判断出现几次的技巧是借助hashSet的存储非重复元素的性质,每次拿到数组元素时同时进行存入hashSet的操作(具体代码中会有)
4.此时的hashMap中存储的即为出现的数字及其出现次数的对应键值对集合,遍历集合,找出值为最大的那个键值对,即拿到出现次数最多的数字及其出现次数
5.打印输出
具体代码:
1 package zhangchaolun.test 2 3 import java.util.HashMap; 4 import java.util.HashSet; 5 import java.util.Scanner; 6 7 public class test2 { 8 public static void main(String[] args) { 9 Scanner sc = new Scanner(System.in); 10 System.out.println("请输入一列字符串:"); 11 String s1 = sc.nextLine(); 12 String regex = "[a-zA-Z]+"; 13 String[] arr1 = s1.split(regex); 14 15 HashSet<String> hashSet = new HashSet<>(); 16 HashMap<String, Integer> hashMap = new HashMap<>(); 17 18 for (int i = 0; i < arr1.length; i++) { 19 if (hashSet.add(arr1[i])) // 此存入方法返回布尔类型值 20 // 能添加的元素即为第一次出现,执行存入map的操作; 21 hashMap.put(arr1[i], 1); 22 else { 23 int n = (int) hashMap.get(arr1[i]);//能添加则不是第一次出现,而map中也已有对应的键值对,更新其值加1即可 24 hashMap.put(arr1[i], ++n); 25 } 26 } 27 // map里存储的是每个十进制数及其出现次数的键-值对应关系 28 findAndResult(hashMap);// 找出最大的Value 29 } 30 31 private static void findAndResult(HashMap<String, Integer> hashMap) { 32 // TODO Auto-generated method stub 33 String mostly = " "; 34 int times = 0; 35 for (String s : hashMap.keySet()) { 36 if (hashMap.get(s) > times) { 37 times = hashMap.get(s); 38 mostly = s; 39 } 40 } 41 // 将字符串mostly转为数字 42 int h = Integer.parseInt(mostly); 43 System.out.println("字符串中出现的最多数字是: " + h); 44 System.out.println("该数字出现的次数是: " + times); 45 System.out.println("所以出现最多次数的数字的和是: " + h * times); 46 47 } 48 49 }
总结:
考察:
1.利用正则表达式进行字符串切割,
2.怎么判断字符串出现了几次(用hashSet),也即考察hashSet的性质,add()方法
3.遍历map的操作
3.更新键值对中value的思路
我没能想到其他的技巧,局限了,有点蛮力哟,不喜勿喷。
以上是关于输入字符串,包含数字,大小写字母,编程输出出现做多的数字的和的主要内容,如果未能解决你的问题,请参考以下文章