从文本文件打印每个单词的计数和行号

时间:2017-11-24 20:32:54

标签: java data-structures

好吧所以这让我困惑了几天,我需要从文本文件中读取并打印每个单词出现的次数,我设法做到但我还需要打印行数每个单词也出现在哪里,以及我在那个时刻停留的地方,我不需要直接的解决方案,因为我想自己解决它,但我需要一些帮助,我应该从哪里开始或下一步做什么

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

public class PrintWordCounts {
    public static void main(String[] args) {
        AVLTree<Word> tree = new AVLTree<Word>();


        try {
            Scanner reader = new Scanner(new File("AboutJUC.txt"));
            reader.useDelimiter("[\\p{Punct}\\s]+");

            while (reader.hasNextLine()){
                String s = reader.nextLine();
                String[] words = s.split("\\s");
                int countLine;
                Word target = new Word(reader.next());
                Word result = tree.search(target);

                if ( result != null )
                    result.count++;
                else
                    tree.insert(target);
                    }


            reader.close();


        } catch (IOException ex) {
            System.out.println("File Error");
        }
            tree.inorder();
    }
}

这是我使用

的Word课程
import java.util.LinkedList;
public class Word implements Comparable<Word> {
    public String word;
    public int count;
    private LinkedList<Integer> lines = new LinkedList<Integer>();
    public int lineCount;

    public Word(String w) {
       word = w;
       count = 1;
       lineCount = 1;
    }

    public boolean equals(Object obj) {
        Word other = (Word) obj;
        return word.equals(other.word);
    }

    public int compareTo(Word obj) {
        int comparedValue = word.compareTo(obj.word);
        while(comparedValue == 0){

            System.out.print(lineCount);
            lineCount++;
        }
        return word.compareTo(obj.word);
    }

    public String toString() {
        return word+"\t"+count + "\t" + "[" + lineCount + "]";
    }
}

2 个答案:

答案 0 :(得分:0)

首先在compareTo中摆脱无限循环。您需要在解决方案中使用2个循环,一个用于行,而嵌套用于一行中的单词。字典比树更合适。在外部循环中创建字典以计算当您离开内部循环时迭代字典中的一行中的单词数,并为该字典中的单词更新一行中的使用次数。它应该是足够的信息来完成我猜的任务。

答案 1 :(得分:0)

第1步:添加行号计数器。我们称之为lineNum。在逐行读取的循环之外初始化它。读取一行后,增加其值。

第2步:在Word中添加方法以添加行号,我们称之为addLineNum。在第一次向树中添加单词时,将此方法与lineNum一起使用,并在更新现有单词时使用以下内容:

if (result != null) {
    result.addLineNum(lineNum);
} else {
    target.addLineNum(lineNum);
    tree.insert(target);
}

第3步:因为每行有多个单词,你甚至创建了words, 你将需要一个嵌套循环来找到这些单词。

步骤4:注意添加行号和匹配的单词计数。可以有比匹配的行更多的单词。