2010-11-16 2 views
4

Je voudrais savoir, que si je n'ai qu'une seule ligne, alors comment compter la fréquence d'un mot particulier dans cette chaîne, en utilisant un simple code java ?!Comment compter une fréquence d'un mot particulier dans une ligne?

Merci à l'avance ..


Ce que je cherche est un code logique exemple en java qui est utilisé pour rechercher un mot dans une phrase. Je construis un filtre anti-spam, qui doit lire la ligne, puis le classer.

Répondre

3

fendu d'abord par des espaces (voir String#split)

Ensuite, utilisez une carte pour cartographier les mots avec la fréquence.

String [] words = line.split(" "); 

Map<String,Integer> frequency = new Map <String,Integer>(); 

for (String word:words){ 

    Integer f = frequency.get(word); 
    frequency.put(word,f+1); 
} 

Ensuite, vous pouvez trouver un mot particulier:

frequency.get(word) 
0

Plusieurs façons:

  1. utilisation divise
  2. Utilisez tokenizers
  3. Utilisez des expressions régulières
  4. Utilisez de bonnes vieilles boucles a e manipulation de chaînes (c.-à-indexOf(), etc.)

Option 1 & 2 a la tête d'essayer de savoir si votre mot se trouve être le dernier sur la ligne (et qui ont besoin d'ajouter un nombre supplémentaire)

Option 3 vous oblige à être en mesure de former la syntaxe regex

Option 4 est archaïque

4

vous pouvez utiliser des expressions régulières.Un exemple de code est:

public int count(String word, String line){ 
    Pattern pattern = Pattern.compile(word); 
    Matcher matcher = pattern.matcher(line); 
    int counter = 0; 
    while (matcher.find()) 
     counter++; 
    return counter; 
} 
2

Utilisation de la bibliothèque Guava:

  1. MultiSet (utilisation lorsque le nombre de tous les mots sont nécessaires)

    String line="Hello world bye bye world"; 
    Multiset<String> countStr=HashMultiset.create(Splitter.on(' ').split(line)); 
    System.out.println(countStr.count("Hello")); //gives count of the word 'Hello' 
    
  2. Iterators (utilisation lorsque le nombre de seulement quelques mots sont nécessaires)

    String line="Hello world bye bye world"; 
    Iterable<String> splitStr=Splitter.on(' ').split(line); 
    System.out.println(Iterables.frequency(splitStr, "Hello")); 
    
1

Après googleing et peu d'études que je suis arrivé ce genre de choses __ peut être helpfull

String str="hello new demo hello"; 
Map<String,Integer> hmap= new HashMap<String,Integer>(); 
for(String tempStr : str.split(" ")) 
{ 
    if(hmap.containsKey(tempStr)) 
    { 
    Integer i=hmap.get(tempStr); 
    i+=1; 
    hmap.put(tempStr,i); 
    } 
    else 
    hmap.put(tempStr,1); 
} 
System.out.println(hmap); 
Questions connexes