Программа индексации файлов не работает

Я должен составить программу, которая читает каждое слово в файле и делает указатель, по каким строкам слово встречается в алфавитном порядке.

например, если файл имел:

белая белая собака толпилась в долине

вывод должен быть:

вокруг: 2 многолюдно: 2 собака: 1 песня: 2 долина: 1 белая: 1, 1


Когда мой файл содержит:

одна рыба две рыбы синяя рыба зеленая рыба корова рыба молоко рыба рыба собака рыба красная рыба вы можете найти маленького ягненка вы можете найти белого теленка

РЕШЕНИЕ НЕПРАВИЛЬНО!: (НЕ В ПОРЯДКЕ АЛЬФА)

а: 3 4 теленка: 4 найти: 3 4 4 ягненка: 3 маленький: 3 белый: 4 вы: 3 4 синий: 1 банка: 3 корова: 2 собака: 2 зеленый: 1 1 2 2 2 2 молоко: 2 красный: 2 два: 1 1 1 рыба: 1 одна: 1


Вот мой код:

ИНДЕКСМАЙКЕР МАСТЕР КЛАСС

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

public class IndexMaker {
    private ArrayList<Word> words;
    private String fileName;
    private String writeFileName;

    public IndexMaker(String fileName, String writeFileName) {
        this.fileName = fileName;
        this.writeFileName = writeFileName;
        words = new ArrayList<Word>();
    }

    public void makeIndex() {
        try {
            File file = new File(fileName);
            Scanner lineScanner = new Scanner(file);
            int lineNum = 0;
            while (lineScanner.hasNext()) {
                lineNum++;
                Scanner wordScanner = new Scanner(lineScanner.nextLine());
                while (wordScanner.hasNext()) {
                    String word = wordScanner.next().toLowerCase();
                    if (!words.contains(new Word(word))) {
                        insertInto(word, findPosition(word), lineNum);
                    } else {
                        addLineNum(word, lineNum);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void displayIndex() {
        try {
            //FileWriter fileWriter = new FileWriter(new File(writeFileName));
            //BufferedWriter writer = new BufferedWriter(fileWriter);
            for (Word word : words)
                System.out.println(word.getWord() + ": " + word.getLineNums());
        } catch (Exception e) {
        }
    }

    private int findPosition(String word) {
        for (int i = 0; i < words.size(); i++) {
            if (word.compareTo(words.get(i).getWord()) <= 0)
                return i;
        }
        return 0;
    }

    private void insertInto(String word, int pos, int lineNum) {
        words.add(pos, new Word(word, String.valueOf(lineNum)));
    }

    private void addLineNum(String word, int lineNum) {
        int pos = findPosition(word);
        words.get(pos).addLineNum(lineNum);
    }
}

СЛОВО КЛАСС

public class Word {
    private String word;
    private String lineNums;
    public Word(String word, String lineNum) {
        this.word = word;
        this.lineNums = lineNum;
    }
    public Word(String word) {
        this.word = word;
        this.lineNums = "";
    }
    public String getWord() {
        return word;
    }
    public String getLineNums() {
        return lineNums;
    }
    public void addLineNum(int num) {
        lineNums += " " + num;
    }
    @Override
    public boolean equals(Object w) {
        if (((Word)w).getWord().equals(word))
            return true;
        else
            return false;
    }
}

КЛИЕНТ

public class Client {
    public static void main(String[] args) {
        IndexMaker indexMaker = new IndexMaker("readme.txt", "readme.txt");
        indexMaker.makeIndex();
        indexMaker.displayIndex();
    }
}

любая помощь будет оценена, спасибо.

1 ответ

Я не могу найти ваше определение для сравнения. Кажется, это будет ключевой частью вашей программы?

Правильно внедрите свой CompareTo и подтвердите, что он работает правильно, распечатав результаты сравнений, используя System.out.println

Провести собственное сравнение - это нормально, если вы все сделаете правильно. Другая вещь, которую вы могли бы сделать, это реализовать Comparable, а затем вы можете заставить Java отсортировать список слов для вас.

Другие вопросы по тегам