计算字符串中各个字符的个数---Map实现

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

/*
 * 练习题:1.adsfagagagagfagsghwg
 * 要求:转换成字符串: a(字符的个数)b()c()..
 */
public class Demo15 {
	public static void main(String[] args) {
		CountAlph countAlph = new CountAlph();
		countAlph.init();
		countAlph.countAlph();
	}
}

class CountAlph{
	private String s;
	public void init(){//输入字符串
		System.out.println("请输入字符串:");
		Scanner scanner = new Scanner(System.in);
		s=scanner.nextLine();
	}
	/*
	 * 思路:1.用Map集合保存<'字符',个数>
	 *     2.将字符串中每一个字母与map中的key比较,若没有就添加该字母为键,个数为
	 */
	public void countAlph() {
		TreeMap<Character,Integer> map = new TreeMap<>();//创建map对象进行保存字母个数
		Set<Map.Entry<Character,Integer>> set = map.entrySet();//将Map键值对映像保存在set集合中
		
		char[] a = s.toCharArray();//将字符串转换成字符数组方便遍历字符串
		for(int i = 0;i < a.length;i++){
			//调用set的迭代器,遍历Map集合。每次要创建新的迭代器,否则运行完一次后hasNext()方法一直指向最后,所以迭代器的创建要放入for循环中
			Iterator<Map.Entry<Character,Integer>> iterator = set.iterator();
			boolean b;//用于保存跳出循环时的iterator.hasNext()值,便于进行判断
			while (b=iterator.hasNext()) {
				Map.Entry<Character,Integer> entry = iterator.next();
				if(a[i]==entry.getKey()){//如果map中有包含该字母的键 就对value进行+1操作
					int n = entry.getValue()+1;
					entry.setValue(n);//修改当前键值对的值
					break;//当修改完值后跳出循环,判断下一个字符
				}//while执行结束
			}
			if(b==false){//说明Map中没有包含该字符的键值对
				map.put(a[i],1);//将字符放入map,个数为1
			}
		}//for循环结束 完成计数
		
		//创建新的迭代器进行输出
		Iterator<Map.Entry<Character,Integer>> iterator2 = set.iterator();
		while (iterator2.hasNext()) {
			Map.Entry<Character,Integer> entry =iterator2.next();
			System.out.print(entry.getKey()+"("+entry.getValue()+")  ");
		}
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值