最近写了一个程序,主要功能就是输入一堆字符,然后统计每个字符出现的次数,我是用HashMap去实现的,但是写完了发现有点笨,代码不是那么简单,是不是自己忽略了最简单的实现方式?请大家帮忙指点一下吧!多谢!!import java.util.HashMap;
import java.util.Scanner;
import java.util.Collection;
import java.util.Set;public class 找重复 { public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.println("Please enter your contents!");
String str1=s.next();
HashMap<Integer,Character> hm=new HashMap<Integer,Character>();
for(int i=1;i<=str1.length();i++){
hm.put(i, str1.charAt(i-1));
}
System.out.println(hm);
Collection<Character> coll=hm.values(); int count=1;
for(int j=1;j<=str1.length();j++){
if(hm.get(j)==null){
continue;
}
for(int k=j+1;k<=str1.length();k++){
if(hm.get(k)==null){
continue;
}
if(hm.get(j)==hm.get(k)){
count+=1;
hm.remove(k);
}
}
System.out.println(hm.remove(j)+"的个数为:"+count);
hm.remove(j);
count=1;
}
}
}

解决方案 »

  1.   

       HashMap放进去的不能是重复的,如果你的字符串是重复的会把你以前的字符替换掉!import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;/*
     统计一个字符串中每个字符的数量
         "aabcdeeedaaa"
         a:5
         b:1
         ... ...
     */
    public class CountCharDemo {
      public static void main(String[] args) {
        Map<Character, Integer> map = 
          count("aabbcdeeeaaa");
        System.out.println(map);
        //MAP的迭代 1
        Set<Map.Entry> set = (Set)map.entrySet();
        Iterator i = set.iterator();
        while(i.hasNext()){
          Map.Entry entry=(Map.Entry)i.next(); 
          System.out.print("字符"+entry.getKey());
          System.out.println("数量:"+entry.getValue());
        }
        //MAP的迭代 1
        Set<Character> keys = map.keySet();
        Iterator ite = keys.iterator();
        while(ite.hasNext()){
          char c = (Character)ite.next();
          int val = map.get(c);
          System.out.print("字符:" + c);
          System.out.println("数:" + val);
        }
      }
      
      public static Map<Character, Integer> count(
          String str){
        Map<Character, Integer> map = 
          new HashMap<Character, Integer>();
        for(int i=0; i<str.length(); i++){
          char c = str.charAt(i);
          if(map.containsKey(c)){//检查 c 是否被统计过
            int val = map.get(c)+1;//取出原先的统计结果并加一
            map.put(c, val);//将新结果送回map
          }else{ //c没有被统计过, 为map增加新纪录:"c:1"
            map.put(c, 1);
          }
        }
        return map;
      }
    }
      

  2.   

    放的时候hm.containsValue(value)判断一下,有Integer +1 ,否则直接放入,Integer=1所有数据录入,结果也统计完成了,直接遍历map即可得到结果。
      

  3.   

    如果只是过滤掉重复的  可以用HashSet
      

  4.   


    public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    System.out.println("Please enter your contents!");
    String str1 = s.next(); Map<Character, Integer> hm = new HashMap<Character, Integer>();

    char ch;
    for (int i = 0; i < str1.length(); i++) {
    ch = str1.charAt(i);
    Integer times = hm.get(ch);
    if (times == null) {
    hm.put(ch, 1);
    } else {
    hm.put(ch, times.intValue() + 1);
    }
    } for (Map.Entry<Character, Integer> entry : hm.entrySet()) {
    System.out.println(entry.getKey() + "的个数为:" + entry.getValue());
    }
    }
      

  5.   


    String[] arr = new String[] { "a", "b", "b", "c", "b", "a" };
    Map<String, Integer> map = new HashMap<String, Integer>();
    for (String s : arr) {
    if (map.containsKey(s)) {
    map.put(s, map.get(s) + 1);
    } else {
    map.put(s, 1);
    }
    }
    for (String key : map.keySet()) {
    System.out.println(key + ":" + map.get(key));
    }