我必须编写一个程序来读取每个单词的文件,并为单词按字母顺序出现的行创建索引。
例如,如果文件有:
一只白白的狗 拥挤在山谷周围
输出应该是:
一个 周围: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();
}
}
如有任何帮助,我们将不胜感激。
最佳答案
我找不到您对 compareTo 的定义。这似乎是您计划的关键部分?
正确实现您的 compareTo 并通过使用 System.out.println 打印比较结果来确认它正常工作
自己进行比较是“可以的”,因为如果您进行得当,它就会起作用。您可以做的另一件事是实现 Comparable,然后您可以让 Java 为您对单词列表进行排序。
关于java - 文件索引程序不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20694291/