如何统计每个单词出现了多少次?

how to count how many times each word appears?

我正在尝试计算 uniqueBagOfWords 中的每个单词在 'sentences' 数组列表中的每个句子中出现的次数。

uniqueBagOFwords = [i, like, to, play, tennis, think, football, needs, big, changes]

我希望能够计算 uniqueBagOfWords 中的一个词在每个句子中出现了多少次....目前我只能在该词出现的位置上加 1,但我会喜欢加上它出现的次数。目前它打印出这个:

我喜欢打网球= 1111100000

我认为足球需要大的改变 = 1000011111

我喜欢足球足球 = 1100001000

我将如何更改此代码以便打印出以下内容..

我喜欢打网球= 1111100000

我认为足球需要大的改变 = 1000011111

我喜欢足球足球 = 1100002000

 public static void main(String[] args) {
        List<String> sentences = new ArrayList<String>();
        sentences.add("i like to play tennis");
        sentences.add("i think football needs big changes");
        sentences.add("i like football football");

    List<String[]> bagOfWords = new ArrayList<String[]>();
    for (String str : sentences) {
        bagOfWords.add(str.split(" "));

    }
    Set<String> uniqueBagOfWords = new LinkedHashSet<String>();
    for (String[] s : bagOfWords) {
        for (String ss : s)
            for (String st : ss.split(" "))
                if (!uniqueBagOfWords.contains(st))
                    uniqueBagOfWords.add(st);
    }

    for (String s : sentences) {
        StringBuilder numOfOccurences = new StringBuilder();
        int count = 0;

        for (String word : uniqueBagOfWords) {

            if (s.contains(word)) {

                numOfOccurences.append(count+1);
            } else {
                numOfOccurences.append("0");
            }
        }
        System.out.println(s + " = " + numOfOccurences);
    }
}

我不完全确定你的目标。

如果只想在一行中打印输出,而不是在每个数字末尾换行,只需使用:

System.out.print(s + " = " + numOfOccurences);

而不是

System.out.println(s + " = " + numOfOccurences);

请注意使用 print 而不是 printlnprintln 自动将换行符 (\n) 添加到输出的末尾。

但也许还可以查看 java.lang.Array 以获取一些有用的搜索实用程序。注意:数组需要排序后才能搜索。

https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html

这里有很多不错的实用程序。

祝你好运:-)

这确实不是最好的解决方法,但它确实有效

public static void main(String[] args) {
    List<String> sentences = new ArrayList<String>();
    sentences.add("i like to play tennis");
    sentences.add("i think football needs big changes");
    sentences.add("i like football football");


List<String[]> bagOfWords = new ArrayList<String[]>();
for (String str : sentences) {
    bagOfWords.add(str.split(" "));

}
Set<String> uniqueBagOfWords = new LinkedHashSet<String>();
for (String[] s : bagOfWords) {
    for (String ss : s)
        for (String st : ss.split(" "))
            if (!uniqueBagOfWords.contains(st))
                uniqueBagOfWords.add(st);

}



for (String st : sentences) {
    StringBuilder numOfOccurences = new StringBuilder();
    int[] array ={0,0,0,0,0,0,0,0,0,0};
    int num=0;
    for (String s : st.split(" ")){
        num=0;
        for (String word : uniqueBagOfWords) {

            if (s.equals(word)) {
                array[num] = array[num]+1;
            }
            num++;
        }
    }
    num=0;
    for(int number : array){
        numOfOccurences.append(number);
    }
    System.out.println(st + " = " + numOfOccurences);

}

这是我得到的输出:

我喜欢打网球= 1111100000

我认为足球需要大的改变 = 1000011111

我喜欢足球足球 = 1100002000

您可以像这样重写最后一个 for 循环:

for (String s : sentences) {
    StringBuilder numOfOccurences = new StringBuilder();

    for (String word : uniqueBagOfWords) {
        int count = 0;
        for (String wordFromSentence : s.split(" ")) {
            if (wordFromSentence.equals(word)) {
                count++;
            }
        }
        numOfOccurences.append(count);
    }
    System.out.println(s + " = " + numOfOccurences);

}