~~这是我的代码可以任何人告诉我为什么输出不正确?
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。任何人都可以告诉我错误。使用标志变量,以便只打印一个单词的频率。
答案 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);