package com.chanchan.java;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class getString {
public static void main(String[] args) {
System.out.println(getstr( "abcbcdacg" ));
}
public static String getstr(String str) {
//第一步,将字符串转化成字符数组
char[] chars = str.toCharArray();
//出啊构建一个集合,用来存储字符以及它们的映射关系
//因为字符串和出现的次数是映射关系,字符出现也有顺序,所以使用treeMap集合来存储
//同时,集合中存储的都是对象的引用类型,所以要将对象的基本数组类型转化成他们的封装数据类型
TreeMap<Character,Integer> tm=new TreeMap<Character, Integer>();
//第二步,遍历数组元素,将数组元素存入对应的集合中,首先要进行判断
int count=0; //这个count也可以放在里面,但是这样的话耗费内存,每次都开辟内存再释放,开辟释放循环.
for(int i=0;i<chars.length;i++){
//如果字符串中出现了非字母,可以添加一层判断,去除掉非字母元素.
if(!(chars[i] >'a' &&chars[i]<'z' || chars[i]>'A' && chars[i]<'Z') )
continue;
//判断数组中的元素在集合中是否存在,如果不存在,添加,如果存在,取出key让key加一,再将元素重新存入
Integer value=tm.get( chars[i] );
/*
if (tm.get(chars[i])==null){
tm.put( chars[i],1 );
}else {
value=value+1;
tm.put( chars[i],value );
}
*/
if(value!=null) //优化后的结果
count=value;
count++;
tm.put( chars[i],count );
count=0; //每次调用过程之后清零
}
System.out.println(tm);
//定义一个StringBuilder
StringBuilder sb=new StringBuilder();
//将字符串存储在集合之后,在打印出来,使用StringBuilder,首先要遍历这个集合,使用entrySet方法
//使用entrySet方法,将map的数据银蛇关系存储到set集合中
Set<Map.Entry<Character, Integer>> entr = tm.entrySet();
//通过迭代器遍历set集合
Iterator<Map.Entry<Character, Integer>> it = entr.iterator();
while (it.hasNext()){
Map.Entry<Character,Integer> ch= it.next();
Character key = ch.getKey();
Integer value = ch.getValue();
sb.append( key+"("+value+")" );
}
return sb.toString();
}
}
获取字符串中字母出现的次数,并将它打印成a(2)b(3)....等的方式
最新推荐文章于 2021-11-20 23:48:54 发布