如何计算字符串中每个单词的频率

时间:2017-06-29 06:37:41

标签: java string

~~这是我的代码可以任何人告诉我为什么输出不正确?

class FrequencyOfWord
{
  public static void main(String dt[])
  {
    String str="Hello World Hello";
    int i=0,j=0,space=0,count=0;
    for(i=0;i<str.length()-1;i++)
    {
        if(str.charAt(i)==' ')
        {
            space++;
        }
    }
    String arr[]=new String[space+1];
    String cstr="";
    for(i=0;i<str.length();i++)
    {
        if(str.charAt(i)==' ')
        {
            arr[j]=cstr;
            cstr="";
            j++;
        }
        else
        {
            cstr=cstr+str.charAt(i);
        }
        arr[j]=cstr;
    }
    //System.out.println(str);
    for(i=0;i<arr.length;i++)
    {
        System.out.print(arr[i]);
    }
    for(i=0;i<arr.length;i++)
    {
        count=0;
        int flag=0;
        for(j=0;j<arr.length;j++)
        {
            if(arr[i]==arr[j])
            {
                count++;
            }
            if((arr[i]==arr[j])&&(i>j))
            {
                flag=1;
            }
        }
        if((count!=0)&&(flag==0))
        {
            System.out.println(arr[i]+"\t\t"+count);
        }
    }
  }
}

每个单词的计数输出为1。任何人都可以告诉我错误。使用标志变量,以便只打印一个单词的频率。

1 个答案:

答案 0 :(得分:1)

您的代码太复杂了 - 尝试使用split和HashMap

     String str="Hello World Hello";
     HashMap<String, Integer> res = new HashMap<String, Integer>();

     String el [] = str.split("\\s+");
     for (String s : el) {
         int count = 0;
         if (res.containsKey(s)) {
             count = res.get(s);
         }
         res.put(s, count + 1);
     }

     // output
     for (String keys : res.keySet()) {
         System.out.printf("%s : %d%n", keys, res.get(keys));
     }

<强>输出

  

世界:1

     

你好:2

编辑:或者使用Java 8,你可以做到

Map<String, Long> freq =
    Stream.of(str.trim().split("\\s+"))
          .collect(Collectors.groupBy(w -> w, Collectors.counting()));
freg.forEach((k, v) -> System.out.println(k + ": " + v);