我必须制作一个程序,它可以读取文件中的每个单词,并按字母顺序对单词出现在哪一行进行索引。文件索引程序不能正常工作
例如,如果文件有:
在山谷拥挤白色白色的狗
输出应该是:
一个 各地:2 拥挤:2 狗: 1 the:2 valley:1 white:1,
当我的文件包括:
一条鱼两条鱼蓝鱼绿鱼 牛鱼奶鱼狗鱼红色的鱼 你可以找到一只小羊羔 你可以找到一个白色的小腿
的输出WRONG!:(不是字母顺序)
一个4:3 小牛: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
这里是我的代码::
INDEXMAKER大师班
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);
}
}
WORD CLASS
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;
}
}
CLIENT
public class Client {
public static void main(String[] args) {
IndexMaker indexMaker = new IndexMaker("readme.txt", "readme.txt");
indexMaker.makeIndex();
indexMaker.displayIndex();
}
}
任何帮助,将不胜感激,谢谢。
compareTo只是比较它不需要的字符串 – user3053331
也许我完全误解了你的问题,但它看起来像你说的问题是输出不是按照字母顺序。 – user1445967
那是主要问题 – user3053331