2010-02-01 6 views
4

J'ai un programme comme celui-ciJava Liste question

public class no_of_letters_count { 
static int i; 
public static void main(String[] args) 
{ 

    String sMessage="hello how r u"; 
    String saMessage[] = sMessage.split(""); 
    List sList = Arrays.asList(saMessage);     
    Collections.sort(sList); 
    Iterator i=sList.iterator(); 
    while (i.hasNext()) 
    { 
    System.out.println((String)i.next()); 
    } 
} 
} 

//Now i want to count the number of occurance of each characters. 

Comme

Nombre de h = 2

Nombre de e = 1

et ainsi de suite

+0

Pouvez-vous reformater votre article pour qu'il soit plus esthétique? – amarillion

+7

Lorsque vous voyez de nouvelles réponses à votre question, votez pour celles qui vous sont utiles en cliquant sur la flèche pointant vers le haut à gauche de votre question (...) Lorsque vous avez décidé quelle réponse vous était la plus utile, répondez en cliquant sur le cadre de la case à cocher à gauche de la réponse. Cela permet aux autres personnes de savoir que vous avez reçu une bonne réponse à votre question. Cela est utile car cela montre aux autres que vous obtenez de la valeur de la communauté. (Si vous ne le faites pas, les gens vous demanderont souvent poliment de revenir en arrière et d'accepter des réponses pour plus de vos questions!) – JuanZe

+1

Et pour trouver/lire toutes les questions que vous avez précédemment posées, cliquez n'importe où où votre surnom apparaît comme un lien que vous atterrissez dans votre page de profil: http://stackoverflow.com/users/175023/gourav Les questions sont listées ici (note: elles peuvent être réparties sur plusieurs pages). – BalusC

Répondre

4

Itérer sur sList et mettre chaque char dans un HashMap Si ce n'est pas le cas, commencez par le compte 1, sinon augmentez le nombre.

EDIT: Je ne peux pas aider à poster du code.

Tout d'abord, utilisez gnerics.

List<Character> sList = Arrays.asList(saMessage.toCharArray()); 

Ensuite, utilisez la carte suivante:

Map<Character, Integer> cmap = new HashMap<Character, Integer>(); 
+3

+1 pour ne pas avoir publié le code. – Adamski

+1

J'allais le poster, mais je ne le ferai pas maintenant :) – ziya

+2

Il aurait du accepter certaines réponses en premier .. – ant

1

En utilisant commons-collections et commons-lang

List<Character> chars = Arrays.asList(
    ArrayUtils.toObject("asdfasdas".toCharArray())); 
Bag bag = new HashBag(chars); 

System.out.println(bag.getCount('a')); 
+3

Avez-vous vraiment besoin d'Appache-Commons pour compter les lettres?c'est juste un devoir – medopal

+1

pourquoi pas? vous ajoutez juste 2 bibliothèques et écrivez 2 lignes. Si c'était mes devoirs, je le ferais de cette façon. D'un autre côté - oui, ce n'est pas le cas – Bozho

+0

Dans la plupart des devoirs, il est stipulé que vous devez implémenter vous-même l'algorithme de base plutôt que de l'importer depuis une bibliothèque comme celle-ci. Il est probablement correct (mais excessif) de l'utiliser pour itérer sur la chaîne, mais de ne pas utiliser une implémentation de sac/multiset sur étagère. – finnw

0

Voici quelques conseils:

Il semble que vous essayez juste d'obtenir les caractères dans un String. Utilisez String.toCharArray().

Utilisez un Map<Character,Integer> pour stocker les caractères et il est occurrences:

foreach char c in sMessage.ToCharArray() 
if map.containsKey(c) 
    map.put(c, map.get(c) + 1); 
else 
    map.put(c, 1); 

tri suivant la carte et présenter les résultats. Je vous laisse ici un extrait pour trier la carte:

List<Entry<Character,Integer>> l = new ArrayList<Entry<Character,Integer>>(map.entrySet()); 

    Collections.sort(l, new Comparator<Entry<Character,Integer>>() { 
     public int compare(Entry<Character, Integer> o1, Entry<Character, Integer> o2) { 
      return o1.getKey().compareTo(o2.getKey()); 
     } 
    }); 
+0

Pourquoi ne pas simplement utiliser une SortedMap pour éviter les frais généraux le tri supplémentaire? En outre, vous pouvez éviter d'appeler containsKey (c) en appelant get (c) et en affectant le résultat à un Integer, et en le comparant à null. – Adamski

+0

Aussi c'est 'String.toCharArray()' nous n'utilisons pas C# ici ... – pjp

0

Imprime nombre d'occurrences de caractères de A à Z et az

Remarque: en utilisant le caractère index de tableau, pas sûr si vous avez les caractères Unicode :), mais toujours une bonne idée je pense !!

String str = "sometext anything"; 
int[] array=new int[256]; 

for (int x:array) array[x]=0; 

for (char c:str.toCharArray()){ 
    array[c]++; 
} 

for (int i=65;i<=90; i++){ 
    System.out.println("Number of "+(char)i+ "="+array[i] 
       + ", number of "+(char)(i+32)+"="+ array[i+32]); 
} 
+2

Si vous n'êtes pas intéressé par les caractères avec 0 occurrences, alors pourquoi ne pas simplement utiliser une carte où la clé est le caractère ... Au lieu de un tableau de la plupart des zéros. – pjp

+0

je sais, mais c'est juste un devoir et je voulais montrer le chemin le plus simple (je suppose) – medopal