欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-18 09:22:23
...
/*
 * 需求:输入字符串“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集合特点的了解、 字符串缓冲区的使用。