1. 程式人生 > >輸入字符串,包含數字,大小寫字母,編程輸出出現做多的數字的和

輸入字符串,包含數字,大小寫字母,編程輸出出現做多的數字的和

數字 字母 十進制數 println code key generated 分離 其他

題目描述:

輸入字符串,包含數字,大小寫字母,編程輸出出現做多的數字的和。

思路:

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的思路

我沒能想到其他的技巧,局限了,有點蠻力喲,不喜勿噴。

輸入字符串,包含數字,大小寫字母,編程輸出出現做多的數字的和