Реализация Hashmap для подсчета вхождений каждого символа - PullRequest
9 голосов
/ 06 декабря 2010

Приведенный ниже код должен подсчитать число каждого символа, и он должен напечатать счет.Но с кодом, который я пробовал, я получаю только 1, я не знаю, какие изменения я должен сделать.

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

class Count_CharMap {
public static void main(String[] args) {
    try
    {
        FileInputStream file = new FileInputStream("D:\\trial.txt");
        DataInputStream dis = new DataInputStream(file);
        BufferedReader br = new BufferedReader(new InputStreamReader(dis));
        String Contents="";
        String str="";

        while ((Contents = br.readLine()) != null) {
            str+=Contents;
        }

        char[]char_array =str.toCharArray();
        int count = 0;
        char ch = char_array[count];
        Map<Character,Integer> charCounter=new HashMap<Character,Integer>();
        for(int i=0;i<str.length();i++)
        {
            if(charCounter.containsKey(char_array[i]))
            {
                charCounter.put(ch, charCounter.get(ch)+1);
            } 
            else
            {
                charCounter.put(ch, 1);
            }
       }

       for(Character key:charCounter.keySet())
       {
           System.out.println(key+""+charCounter.get(key));
       }
    } 
    catch(IOException e1){
        System.out.println(e1);
    }
    }
}

Фактический вывод должен быть таким:2 б 2с 2 д 1.

Ответы [ 9 ]

10 голосов
/ 06 декабря 2010

Вы оставляете char ch установленным как один и тот же символ при каждом выполнении цикла.

Должно быть:

ch = char_array[i]; 
if(charCounter.containsKey(ch)){
     charCounter.put(ch, charCounter.get(ch)+1);
}
else
{
    charCounter.put(ch, 1);
}

Внутри цикла for.

5 голосов
/ 28 июля 2013

Java 8 потоков:

Map<String, Long> map = 
    Arrays.stream(string.split("")).
    collect(Collectors.groupingBy(c -> c, Collectors.counting()));

Гуава HashMultiset :

Multiset<Character> set = HashMultiset.create(Chars.asList("bbc".toCharArray()));
assertEquals(2, set.count('b'));
3 голосов
/ 20 мая 2013

Hai All Приведенный ниже код предназначен для подсчета появления каждого символа и должен распечатать счет.может быть, поможет вам .. Спасибо за просмотр

пакет com.corejava;

import java.util.Map;
import java.util.TreeMap;

public class Test {
    public static void main(String[] args) {

        String str = "ramakoteswararao";

        char[] char_array = str.toCharArray();

        System.out.println("The Given String is : " + str);

    Map<Character, Integer> charCounter = new TreeMap<Character, Integer>();

        for (char i : char_array) {

    charCounter.put(i,charCounter.get(i) == null ? 1 : charCounter.get(i) + 1);

        }

    for (Character key : charCounter.keySet()) {
  System.out.println("occurrence of '" + key + "' is  "+ charCounter.get(key));
        }

    }

}
1 голос
/ 07 ноября 2012
import java.util.HashMap;
import java.util.Map;
...
Map<String, Integer> freq = new HashMap<String, Integer>();
...
int count = freq.containsKey(word) ? freq.get(word) : 0;
freq.put(word, count + 1);
0 голосов
/ 13 августа 2018

public void mapPractices () {

    Map<Character, Integer> map = new HashMap<>();
    String dataString = "!@#$%^&*()__)(*&^%$#@!@#$%^&*(*&^%$#@!@#$%^&*()(*&^%$#@!@#$%^&*()(*&^%$#@!@#$%^&*()(*&^%$#";
    for (int i = 0; i < dataString.length(); i++) {

        char charAt = dataString.charAt(i);

        if (map.containsKey(charAt)) {
            int val = map.get(charAt);
            map.put(charAt, val+1);

        } else {

            map.put(charAt, +1);
        }

    }
    System.out.println("Characters ant the string=" + map);

}
0 голосов
/ 29 января 2018
import java.util.*;

public class Test {
    public static void main(String[] args) {

        String str = "STACKOVERFLOW";

        char[] char_array = str.toCharArray();

        System.out.println("The Given String is : " + str);

    Map<Character, Integer> charCounter = new TreeMap<Character, Integer>();

        for (char i : char_array) {

    charCounter.put(i,charCounter.get(i) == null ? 1 : charCounter.get(i) + 1);

        }

    for (Character key : charCounter.keySet()) {
  System.out.println("occurrence of '" + key + "' is  "+ charCounter.get(key));
        }

    }

}
0 голосов
/ 14 сентября 2017
    String str=new String("aabbbcddddee");
    char[] ch=str.toCharArray();
    HashMap<Character,Integer> hm=new HashMap<Character,Integer>();
    for(char ch1:ch)
    {

        if(hm.containsKey(ch1))
        {
            hm.put(ch1,hm.get(ch1)+1);
        }
        else
        {
            hm.put(ch1,1);
        }
    }

    Set s1=hm.entrySet();
    Iterator itr=s1.iterator();

    while(itr.hasNext())
    {
        Map.Entry m1=(Map.Entry)itr.next();
        System.out.println(m1);
    }
0 голосов
/ 12 июня 2017
import java.util.TreeMap;

public class OccuranceDemo {
    public static void main(String[] args) {
        TreeMap<String , Integer> mp=new TreeMap();
        String s="rain rain go away";
        String[] arr = s.split(" ");
        int length=arr.length;
        for(int i=0;i<length;i++)
       {
         String h = arr[i];
        mp.put(h, mp.get(h)==null?1:mp.get(h)+1);
    }
    System.out.println(mp.get("go"));
  }
}
0 голосов
/ 09 апреля 2015

внутри цикла

ch = char_array[i];<br> charCounter.put(charCounter.contains(ch)?charCounter.get(ch)+1:1);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...