统计字符串中每个字符出现的次数(Map集合)

/*
 * 需求:输入字符串“asbdajkdbsajbdfdfdss”
 * 
 * 输出:a(3)b(3)d(5)f(2)j(2)k(1)s(4)
 * 
 * 分析:
 * 		A:定义一个字符串
 * 		B:定义TreeMap集合
 * 			键(key):Character
 * 			值(value):Integer
 * 		C:把字符串转化成字符串数组
 * 		D:遍历字符数组,得到每一个字符
 * 		E:拿刚才得到的字符去集合中找值,看返回值
 * 			是null:说明这个字符还没有存入集合,添加键值对(“字符”,1);
 * 			不是null:说明这个字符已经存入,修改value,(“字符”,value+1);
 * 		F:定义字符串缓冲区变量
 * 		G:遍历集合,得到键和值,进行按照要求拼接
 * 		H:把字符串缓冲区转化成字符串输出
 */

代码实现:

import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

public class Test1 {
	public static void main(String[] args) {
		//定义一个字符串
		Scanner sc=new Scanner(System.in);
		
		//定义TreeMap集合
		//由于要求输出是需要字符串按照自然顺序输出,所以使用TreeMap集合比较好
		TreeMap<Character, Integer> map=new TreeMap<Character, Integer>();
		
		System.out.println("请输入字符串:");
		//输入一个字符串
		String s=sc.nextLine();
		
		char[] array=s.toCharArray();
		
		//遍历字符串
		for(char ch:array) {
			//拿刚才得到的字符去集合中找值,看返回值(注意:这里i要定义成Integer类型,而不能定义成int类型)
			Integer i=map.get(ch);
			//是null:说明这个字符还没有存入集合,添加键值对(“字符”,1);
			if(i==null) {
				map.put(ch, 1);
			}
			//不是null:说明这个字符已经存入,修改value,(“字符”,value+1);
			else {
				map.put(ch, i+1);
			}
		}
		
		//定义字符串缓冲区变量
		StringBuilder sb=new StringBuilder();
		
		//遍历集合,得到键和值,进行按照要求拼接
		Set<Character> mapkey=map.keySet();
		
		for(Character c:mapkey) {
			Integer value=map.get(c);
			sb.append(c).append("(").append(value).append(")");
		}
		
		String result=sb.toString();
		System.out.println("reault:"+result);
	}
}


输入:asbdajkdbsajbdfdfdss

输出:a(3)b(3)d(5)f(2)j(2)k(1)s(4)

主要考察到对TreeMap集合以及HashMap集合特点的了解、 字符串缓冲区的使用。

发布了88 篇原创文章 · 获赞 47 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/dai_ma_dong/article/details/103206093