今天做了一个小练习,给一个随机字符串,要打印出每一个字符出现的次数。思考了一下,觉得需要遍历这个字符串,“字符”和“数量”就像是名值对,就想到了Map,一直没有用过,就查看了一下API文档,最后发现Hashtable可以满足。就试着写了一下,效果不错。代码如下:
package string_pracitice;
import java.util.Enumeration;
import java.util.Hashtable;
import javax.swing.JOptionPane;
public class CountChacacter {
public static void main(String[] args) {
CountChacacter countChacacter=new CountChacacter();
String string=JOptionPane.showInputDialog("Please input A string...");
Hashtable hash = countChacacter.cout(string);
countChacacter.print(hash);
}
/**
* 用hashtable存放字符的个数 string 是字符串
*/
public Hashtable cout(String string){
Hashtable<Character, Integer> hash=new Hashtable<Character, Integer>();//用于存放字符和字符的数
char[] charArray = string.toCharArray();//把字符转换为字符数组
//遍历数组
for(char c:charArray){
boolean exist=false;//用于标示字符是否已经在Hashtable中,默认是不在
Enumeration<Character> keys = hash.keys();//获得Hashtable中的键的枚举的集合
while(keys.hasMoreElements()){//遍历键的枚举的集合
if(c==keys.nextElement()){
exist=true;
hash.put(c, hash.get(c)+1);//获取该键的值加1放到集合中
break;
}
}
if(!exist){
hash.put(c, 1);
}
}
return hash;
}
/**
* 用Dialog打印出结果
*/
public void print(Hashtable hash){
Enumeration keys = hash.keys();//获取键的枚举的集合
Enumeration elements = hash.elements();//获取键值的枚举的集合
String result="";
for(int i=0;i<hash.size();i++){
result+=keys.nextElement()+":"+elements.nextElement()+"\n";
}
JOptionPane.showMessageDialog(null, result);
}
}