使用集合键盘录入一个字符串,统计每个字符出现的次数-----例题

键盘录入一个字符串,统计每个字符出现的次数
例如,录入aaaabbccddd!@#@#KaTeX parse error: Expected 'EOF', got '#' at position 2: @#̲%cc66ff
打印出来:a有4个,b有2个,c有4个,d有3个,!有1个,@有3个,$有2个,%有1个,6有2个,f有2个
思路:
1 使用Map key–>字符 value–>次数
2 遍历字符串取到字符
3 判断取到的字符在map的key中是否存在 存在,根据key取出次数 再+1 存回去。 不存在,把取到字符当成key存入map并存入次数(value) 1

package com.wednesday.generic31;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

public class Map_Hash {
public static void main(String[] args) {
	
	Scanner sc=new Scanner(System.in);
	String st=sc.nextLine();
	//定义Map集合,使用TreeMap使集合有序
	Map<Character,Integer>map=new TreeMap<>();
		char [] stchar=st.toCharArray();
		//遍历char数组,如果里面包含则value值加一,否则添加赋初值
		for(char ch:stchar){
		
/*			    代码未优化,帮助理解
				if(map.containsKey(ch)){
				Integer value=map.get(ch);
				map.put(ch, value+1);
			}else{
				map.put(ch, 1);
				}
				//map.containsKey(ch) ?map.put(ch, map.get(ch)+1):map.put(ch, 1);
			*/
				map.put(ch, map.containsKey(ch)?map.get(ch)+1:1);
		}
		
		/*//输出使用entry方法获取map里的内容
		Set> mapentry=map.entrySet();
		//写泛型时不会写
		Iterator >entryite=mapentry.iterator();
		StringBuilder sb=new StringBuilder();
		
		while(entryite.hasNext()){
			Entry  entry=entryite.next();
			char ch=entry.getKey();
			int in=entry.getValue();
			sb.append(ch).append("有").append(in).append("个,");
		}
		System.out.println(sb.toString().subSequence(0, sb.length()-1));*/

		//上面代码的优化
		StringBuilder sb=new StringBuilder();
		//遍历map集合
		for(Entry<Character,Integer > ent:map.entrySet()){
			sb.append(ent.getKey()).append("有").append(ent.getValue()).append("个,");
		}
		//输出
		System.out.println(sb.toString().subSequence(0, sb.length()-1));

}

}


你可能感兴趣的:(键盘录入一个字符串,统计每个字符出现的次数)