【问题标题】:Need help using String Tokenizer to count the frequency of words in a string需要帮助使用 String Tokenizer 来计算字符串中单词的频率
【发布时间】:2020-02-06 15:25:32
【问题描述】:

嘿,我正在使用 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);
        }
 }
}

【问题讨论】:

  • 你必须保留一个列表或一个独特的非重新获得令牌的地图。

标签: java string


【解决方案1】:

字符串标记器类允许您将字符串分解为标记,但它不能帮助您计算每个单词的频率。例如,您可以使用Map 结构来存储String 单词和Integer 频率。在以下示例中,我使用了TreeMap,因为这样我可以使用单词的字典顺序打印单词和频率。

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

【讨论】:

    【解决方案2】:

    如果您想避免使用映射并改用 HashSet(正如我的一个好奇的学生所问,他出于某种原因讨厌 HashMaps),那么您可以应用以下代码:

    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();
         }
            int f[] = new int[n];
          for(i=0;i<n;i++)
          { int freq=0;
              for(j=0;j<n;j++)
              {
                if(a[i].equals(a[j]))
                f[i]++;
    
                }   
            }
            Arrays.sort(f);
          HashSet<String> std = new HashSet<>();
          for(String s:a){
              std.add(s);
          }
          String[] Geeks = std.toArray(new String[std.size()]);
          for(i=0;i<Geeks.length;i++){
              System.out.println(Geeks[i] +"=" +f[i]);
          }
    }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多