使用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

我正在尝试使用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 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())