java - 文件索引程序不工作

标签 java indexing bluej alphabetical

我必须编写一个程序来读取每个单词的文件,并为单词按字母顺序出现的行创建索引。

例如,如果文件有:

一只白白的狗 拥挤在山谷周围

输出应该是:

一个 周围: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/

相关文章:

sql-server - 优化 Azure SQL Server 中最新/最后一行的表

java - 不是声明吗? (布鲁杰)

java - VM 在静态方法上终止

java - 如何使用 JAX-RS 与 Resteasy、Angular 和 Wildfly10 处理 CORS

java - 在运行时刷新java程序

sql-server - 由于此查询中定义的提示,查询处理器无法生成查询计划。重新提交查询并且不使用 SET FORCEPLAN

database - CouchBase 索引嵌套元素

java - 如何从 Java 中的颜色数组中随机选择一种颜色?

java - 使用 Spring 进行字符串到字符串的映射?

javascript - 如何使用 "java script"进行加密并使用 "java"进行解密