如何使用Java计算文件中的每个单词

时间:2014-10-30 20:58:04

标签: java

我试图用三种实例方法编写一个程序,但我似乎无法做到正确。我的方法wordCount返回文件中的行数。不是它应该的字数。

我只是迷失在方法mostFrequentWords ..

希望有人可以帮助我

package opgaver;

import java.util.*;
import java.io.*;

public class TextAnalysis14 {
    Scanner file;
    int CountWords = 0;
    boolean Contains = true;
    String[] words;
    String[] MFwords;

    public TextAnalysis14(String sourceFileName, int maxNoOfWords) {
        String wordline;
        words = new String[maxNoOfWords];
        String[] line;

        try {
            file = new Scanner(new File(sourceFileName));
        } catch (FileNotFoundException e) {
            file = new Scanner("");
        }

        while (file.hasNext()) {
            wordline = file.next();
            line = wordline.split("[^a-zA -Z]+");
            for (int i = 0; i < line.length; i++) {
                if (!line[i].equals(" ")) {
                    words[CountWords] = line[i];
                    CountWords++;
                }
            }
        }
        if (words[CountWords] == (null)) {
            for (int i = CountWords; i < maxNoOfWords; i++) {
                words[i] = ("empty");
            }
        }
    }

    public int wordCount() {
        return CountWords;
    }

    public boolean contains(String word) {
        for (int i = 0; i < words.length; i++) {
            if (words[i].contains(word)) {
                return Contains;
            }
        }
        return false;
    }

    public String[] mostFrequentWords() {
        Arrays.sort(words);
        return MFwords;
    }
}

4 个答案:

答案 0 :(得分:0)

致电wordline = file.next();,你不是在读行。

TextAnalysis14中将您的状况更改为file.hasNextLine(),并使用file.nextLine()

读取行
while (file.hasNextLine()) {
    wordline = file.nextLine();
    ....
}

答案 1 :(得分:0)

由于我的菜鸟状态,我无法发表评论,但看起来你的正则表达式在A和-Z之间有空格。

答案 2 :(得分:0)

试试这个。

public static void main(String[] args) {
    String str = "this    is    a space String"; // read all lines in a file
    String[] splited = str.split(" ");
    List<String> list = new ArrayList<String>();
    for(int i = 0;i < splited.length; i++){
        if(splited[i].length() > 0){
            list.add(splited[i]);
        }
    }
    System.out.println(list.size());
}

答案 3 :(得分:-1)

您可以使用Java 8尝试类似的东西:

Stream<String> lines = Files.lines(Paths.get("c:/", "file.txt"));
in wordCount = lines.mapToInt(s -> s.split(' ').length()).sum();

此功能只需在文件中计算单词数。