我如何搜索用户确定的单词并使用java计算文本文件中的出现次数?

时间:2015-03-09 20:59:19

标签: java

我已经达到了一个可以读取文件并在文件中输出实际文本但我不太确定如何继续搜索特定单词并显示单词数的点。

2 个答案:

答案 0 :(得分:1)

有很多方法。如果您逐行阅读文件,则可以使用indexOf类上的String方法在每行搜索文本。您需要反复调用它才能在线路中寻找其他事件。

请参阅indexOf上的文档:

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(java.lang.String,%20int)

答案 1 :(得分:0)

据我了解你的问题,如果你正在逐行读取文本,你可以使用递归来计算出同一行中出现的单词的数量:

以下方法计算单词出现在同一行中的次数

private static int numberOfLineOccurences;

public static int countNumberOfTimesInALine(String line, String word) {
    if (line.indexOf(word) == -1) {
        return numberOfLineOccurences;
    } else {
        numberOfLineOccurences++;
        if (line.indexOf(word) + word.length() >  line.length() -1     ) {
            return numberOfLineOccurences;
        }
        return countNumberOfTimesInALine(
                line.substring(line.indexOf(word) + word.length()), word );
    }

}

为了跟踪我文件中第一次出现的单词以及出现次数,我创建了一个像这样的WordInfo类:

class WordInfo {

    private int firstOccurenceLineNumber;
    private int firstOccurenceColumnNumber;
    private String word;
    private int numberOfOccurences;

    public String getWord() {
        return word;
    }

    public int getNumberOfOccurences() {
        return numberOfOccurences;
    }

    public WordInfo(String word) {
        this.word = word;
    }

    public void upOccurrence() {
        numberOfOccurences++;
    }

   public void upOccurrence(int numberOfTimes) {
        numberOfOccurences+= numberOfTimes;
    }

   public int getFirstOccurenceLineNumber() {
    return firstOccurenceLineNumber;
    }

   public void setFirstOccurenceLineNumber(int firstOccurenceLineNumber) {
       this.firstOccurenceLineNumber = firstOccurenceLineNumber;
    }

   public int getFirstOccurenceColumnNumber() {
       return firstOccurenceColumnNumber;
    }

    public void setFirstOccurenceColumnNumber(int     firstOccurenceColumnNumber) {
        this.firstOccurenceColumnNumber = firstOccurenceColumnNumber;
    }
}

现在我可以创建我的searchWord方法了。我给他一个要查找的单词,fileName和一个WordInfo对象作为输入参数填充

public static boolean searchWord(String word, String filePath, WordInfo wInfo) throws IOException {

    boolean result = false;
    boolean firstOccurenceFound = false;
    int lineNumber = 0;

    BufferedReader reader = new BufferedReader(new FileReader(new File(filePath)));
    String line = null;

    while ( (line = reader.readLine()) != null) {

        lineNumber++;

        numberOfLineOccurences= 0;

        if (line.indexOf(word) != -1) {
            if (!result) {
                result = true;
            }
            if (!firstOccurenceFound) {
                firstOccurenceFound = true;
                wInfo.setFirstOccurenceLineNumber(lineNumber);
                wInfo.setFirstOccurenceColumnNumber(line.indexOf(word) + 1);


            }
            wInfo.upOccurrence(countNumberOfTimesInALine(line, word));
        }


    }

    reader.close();

    return result;
}

以下是插图和结果

我在名为DemoFile.txt的文件中有以下内容

data example for test here

我使用以下主要方法测试代码(我正在寻找单词concept):

public static void main(String[] args) throws IOException {
    WordInfo wInfo = new WordInfo("concept");
    if ( searchWord("concept", FILE_PATH, wInfo)) {
        System.out.println("Searching for " + wInfo.getWord());
        System.out.println("First line where found : " + wInfo.getFirstOccurenceLineNumber());
        System.out.println("First column found: " + wInfo.getFirstOccurenceColumnNumber());
        System.out.println("Number of occurrences " + wInfo.getNumberOfOccurences());


    }


}

我获得了以下结果:

enter image description here