Программа индексации файлов не работает
Я должен составить программу, которая читает каждое слово в файле и делает указатель, по каким строкам слово встречается в алфавитном порядке.
например, если файл имел:
белая белая собака толпилась в долине
вывод должен быть:
вокруг: 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 отсортировать список слов для вас.