Нужна помощь с использованием String Tokenizer для подсчета частоты слов в строке - PullRequest
0 голосов
/ 06 февраля 2020

Эй, я использую Blue J, и мне нужно использовать метод StringTokenizer, чтобы найти частоту слов. Я легко могу это сделать, но не могу придумать способ не печатать повторяющиеся слова.

import java.util.*;
class freq_wrd
{
 public static void main()
 {   Scanner ob=new Scanner(System.in);
     System.out.println("Enter String to read");
     String str = ob.nextLine();
     int i,j;
     StringTokenizer st = new StringTokenizer(str,"!@#$=-%^&*()_+ |}{][|<>?>,./:';");
     int n = st.countTokens();
     String a[]=new String[n];
     for(i=0;i<n;i++)
     {
        a[i]=st.nextToken();
     }

      for(i=0;i<n;i++)
      { int freq=0;
          for(j=0;j<n;j++)
          {
            if(a[i].equals(a[j]))
            freq+=1;

            }   
            System.out.println(a[i] + " = "+freq);
        }
 }
}

1 Ответ

0 голосов
/ 12 февраля 2020

Класс строкового токенизатора позволяет разбить строку на токены, но он не может помочь вам вычислить частоты каждого слова. Для этого, например, вы можете использовать структуру Map для хранения String слова и Integer частоты. В следующем примере я использую TreeMap, потому что таким образом я могу печатать слова и частоты, используя лексикографический порядок слов c.

Map<String, Integer> freq = new TreeMap<>();
for (String word : words) {
    int count = freq.containsKey(word) ? freq.get(word) : 0;
    freq.put(word, count + 1);
}
for (String word: freq.keySet()) {
    System.out.println(word + " = "+ freq.get(word));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...