2010-12-06 7 views
8

Le code ci-dessous consiste à compter l'occurrence de chaque caractère et à imprimer le nombre. Mais avec le code que j'ai essayé je reçois seulement 1 je ne connais pas les changements que je devrais faire. Aidez-moi, s'il vous plaît.Implémentation de Hashmap pour compter les occurrences de chaque caractère

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); 
    } 
    } 
} 

La production réelle devrait être comme Si j'ai abcdabc dans mon trial.txt il devrait imprimer un 2 b 2c 2 d 1.

+2

correctement votre code Indentation, il vous aidera à obtenir de l'aide. –

Répondre

8

Vous partez ensemble char ch comme le même caractère à travers chaque l'exécution de la boucle.

Il devrait être:

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

l'intérieur de la boucle.

+0

foin merci beaucoup. Silly i m :-) Le code imprime parfaitement tous les caractères et les occurrences. Je veux les imprimer en ordre alphabétique. Comment faire ça? – Sumithra

+1

Utilisez un treemap au lieu d'un hashmap et il devrait le faire. Sinon, vous devrez le trier en utilisant un comparateur, google. http://download.oracle.com/javase/1.4.2/docs/api/java/util/TreeMap.html – Paul

+1

Great Paul. +1 de moi. – Mudassir

1
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); 
2

Hai Tous Le code ci-dessous permet de compter l'occurrence de chaque caractère et d'imprimer le nombre. peut être vous aide..Merci de voir

package 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)); 
     } 

    } 

} 
+0

Salut, bienvenue à SO. Lorsque vous publiez une solution dans le code, il peut être utile d'inclure un court résumé de la ligne de pensée. –

3

Java 8 courants:

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

Guava HashMultiset:

Multiset<Character> set = HashMultiset.create(Chars.asList("bbc".toCharArray())); 
assertEquals(2, set.count('b')); 
0

à l'intérieur de la boucle for

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

0
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

Si nous avons besoin d'obtenir une autre clé dans l'exemple ci-dessus, nous avons pris –

+0

Salut, bienvenue à SO. Un bon premier essai, mais votre réponse ne répond pas réellement à un certain nombre d'exigences: (1) Il compte les mots, pas les caractères (2) Il n'imprime pas les mots et les chiffres à la fin - doesn ' t travail pour les chaînes arbitraires (3) Il ne fait pas Hashmap, comme demandé (4) Il ne corrige pas réellement le code du demandeur, mais offre une autre solution. S'il vous plaît lire attentivement la question à l'avenir avant de demander. Voir ce guide: https://stackoverflow.com/help/how-to-answer – theFunkyEngineer

0
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
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)); 
     } 

    } 

} 
Questions connexes