JAVA编程题:字符串"yekmaakkccekymbvb",求出字符串中有多少种字符,以及每个字符的个数?

JAVA编程题:字符串"yekmaakkccekymbvb",求出字符串中有多少种字符,以及每个字符的个数?

第1个回答  2013-04-10
import java.util.*;
import java.util.Map.Entry;
public class CountChars {
private LinkedList<Map<String, Integer>> list = new LinkedList<Map<String, Integer>>();
public static void main(String[] args) { CountChars cc = new CountChars();
cc.getCounts("yekmaakkccekymbvb");
cc.sort(cc.list);
cc.show(cc.list);
}

public void getCounts(String str) {
if (str!=null || str.length()>0) {
for (int i=0; i<str.length(); i++) {
if (list.size() == 0) {
Map<String, Integer> tm = new HashMap<String, Integer>();
tm.put(str.charAt(i)+"", 1);
list.addLast(tm);
continue;
}
for (int j=0; j<list.size(); j++) {
Map<String, Integer> tm = (Map<String, Integer>)list.get(j);
if (tm.containsKey(str.charAt(i)+"")) {
int count = tm.get(str.charAt(i)+"");
tm = new HashMap<String, Integer>();
tm.put(str.charAt(i)+"", count+1);
list.set(j, tm);
break;
}
if (j == list.size()-1) {
tm = new HashMap<String, Integer>();
tm.put(str.charAt(i)+"", 1);
list.addLast(tm);
break;
}
}
}
}
}

public void sort(List<Map<String, Integer>> list) {
for (int i=0; i<list.size(); i++) {
for (int j=1; j<list.size(); j++) {
Map<String, Integer> tmp1 = (Map<String, Integer>)list.get(j-1);
Map<String, Integer> tmp2 = (Map<String, Integer>)list.get(j);
char ct = tmp1.entrySet().iterator().next().getKey().charAt(0);
char ct2 = tmp2.entrySet().iterator().next().getKey().charAt(0);
if (ct > ct2) {
list.set(j-1, tmp2);
list.set(j, tmp1);
}
}
}
}

public void show(List<Map<String, Integer>> list) {
System.out.println("字符串中包含 "+ list.size() +" 种字符");
for (int i=0; i<list.size(); i++) {
Map<String, Integer> mm = (Map<String, Integer>)list.get(i);
Set<Entry<String, Integer>> set = mm.entrySet();
Iterator<Entry<String, Integer>> it = set.iterator();
while(it.hasNext()) {
Entry<String, Integer> ent =it.next();
System.out.println(ent.getKey()+" 个数: "+ent.getValue());
}
}
System.out.println();
}

}

运行效果:
D:\>javac CountChars.java
D:\>java CountChars字符串中包含 8 种字符
a 个数: 2
b 个数: 2
c 个数: 2
e 个数: 2
k 个数: 4
m 个数: 2
v 个数: 1
y 个数: 2

D:\>