使用java查找句子中任何给定单词的出现频率
我正在尝试使用java查找给定单词在句子中的出现情况使用java查找句子中任何给定单词的出现频率,java,Java,我正在尝试使用java查找给定单词在句子中的出现情况 // Print word frequencies wordCount.forEach((k, v) -> { if(k.equalsIgnoreCase(key)) System.out.printf("%s %d\n", k, v); }); 我的输入包含两行,第一行包含一个单词,第二行包含句子 Sample Input: love There is only one hap
// Print word frequencies
wordCount.forEach((k, v) -> {
if(k.equalsIgnoreCase(key))
System.out.printf("%s %d\n", k, v);
});
我的输入包含两行,第一行包含一个单词,第二行包含句子
Sample Input:
love
There is only one happiness in this life,to love and be loved.
Sample Output:
1
// Print word frequencies
wordCount.forEach((k, v) -> {
if(k.equalsIgnoreCase(key))
System.out.printf("%s %d\n", k, v);
});
我尝试在下面的程序中打印值1,但它是为每个单词打印的,而不是为同一个单词打印的。有人能帮我修一下吗
import java.io.IOException;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
public class Test {
public static void main(String args[]) throws IOException {
String test = "love\n" + "There is only one happiness in this life,to love and be loved.";
System.out.println(test);
Map<String, Integer> wordCount = Arrays.stream(test.split("\\s+"))
.collect(Collectors.toMap(k -> k, v -> 1, (v1, v2) -> v1 + v2));
// Print word frequencies
wordCount.forEach((k, v) -> System.out.printf("%s %d\n", k, v));
}
}
// Print word frequencies
wordCount.forEach((k, v) -> {
if(k.equalsIgnoreCase(key))
System.out.printf("%s %d\n", k, v);
});
import java.io.IOException;
导入java.util.array;
导入java.util.Map;
导入java.util.stream.collector;
公开课考试{
公共静态void main(字符串args[])引发IOException{
String test=“爱”+“生命中只有一种幸福,那就是爱和被爱。”;
系统输出打印LN(测试);
Map wordCount=Arrays.stream(test.split(\\s+))
.collect(收集器.toMap(k->k,v->1,(v1,v2)->v1+v2));
//打印字频率
forEach((k,v)->System.out.printf(“%s%d\n”,k,v));
}
}
这可以通过一个简单的if语句来解决。您所要做的就是确保当前键与第一行匹配。为此,在映射字符串之前,先获取第一行本身
// Print word frequencies
wordCount.forEach((k, v) -> {
if(k.equalsIgnoreCase(key))
System.out.printf("%s %d\n", k, v);
});
String test=“爱”+“生命中只有一种幸福,那就是爱和被爱。”;
//获得第一行“爱”
字符串字=test.split(\\n“)[0];
/*
*获取第二行(要映射的行)
*“此生只有一种幸福,爱与被爱。”
*/
字符串senctence=test.split(\\n“)[1];
系统输出打印LN(测试);
Map wordCount=Arrays.stream(senctence.split([\\s+]))
.collect(收集器.toMap(k->k,v->1,(v1,v2)->v1+v2));
//打印字频率
forEach((k,v)->{
//检查键是否与主输入匹配
如果(k等于(字))
System.out.printf(“%s%d\n”,k,v);
});
我认为第一个问题是在count中输入键值。请分别尝试:
String key = "love";
String test = "There is only one happiness in this life,to love and be loved.";
// Print word frequencies
wordCount.forEach((k, v) -> {
if(k.equalsIgnoreCase(key))
System.out.printf("%s %d\n", k, v);
});
然后
// Print word frequencies
wordCount.forEach((k, v) -> {
if(k.equalsIgnoreCase(key))
System.out.printf("%s %d\n", k, v);
});
你甚至都不去查单词
love
,你只是把它解析成你正在扫描的句子。你有没有试过在Java中使用正则表达式,用它来计算出现的次数,或者只是检查是否有单词?没有回答你的问题,但是请注意,有一种更简单的方法可以获得所需的映射:.collect(Collectors.groupby(w->w,Collectors.counting())