本帖最后由 靓仔 于 2013-10-30 08:36 编辑
练习
"abcabb...."获取该字符串中字母出现的次数
希望打印结果a(2)b(3)c(1).......
import java.util.*;
class MapTest3
{
public static void main(String[] args)
{
String S=charCount("aabbckededefdssa");
System.out.println(S);
}
public static String charCount(String str)
{
int count=0;
char[] chs=str.toCharArray();
TreeMap<Character,Integer> tm= new TreeMap<Character,Integer>();//我们肯定拿字母作为键,字母作为值,char,和int,
//可是泛型类接收的都是引用类型,所以用Character和integer、
for(int x=0;x<chs.length;x++)
{
if(!(chs[x]>='a'&& chs[x]<='z'||chs[x]>='A'&& chs[x]<='Z'));//去除非字母,如+ - 加入b进来,判断正确,就不在判断右边了 这通过不了为什么啊
continue;
Integer Value=tm.get(chs[x]);//字母作为键去找集合
if(Value!=null)
{
count=Value;
}
count++;
tm.put(chs[x],count);//会打印a(3)b(4)c(5)d(10)e(9)f(10)k(6)s(12),所以count++要清零
count=0;//可以定义在里边,但定义在外边好。节省空间
/*代码优化
if(Value==null)
{
tm.put(chs[x],1);
}
else
{
Value =Value+1;
tm.put(chs[x],Value);
}
*/
}
//System.out.println(tm);
//如何打印出a(3)b(2).....
StringBuilder sb=new StringBuilder();
Set<Map.Entry<Character,Integer>> entrySet=tm.entrySet();
Iterator<Map.Entry<Character,Integer>> it=entrySet.iterator();
while(it.hasNext())
{
Map.Entry<Character,Integer> me=it.next();
Character ch=me.getKey();
Integer Value=me.getValue();
sb.append(ch+"("+Value+")");
}
return sb.toString();
}
}
|