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()+") ");
}
}
}
计算字符串中各个字符的个数---Map实现
最新推荐文章于 2022-11-01 23:27:48 发布