首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 實現電子詞典:基於 TreeMap 的單詞查詢與全量導出

     編輯:Java 綜合教學

Java 電子詞典實戰:從文件加載到高效查詢

本文實現一個控制台交互式電子詞典,支持 單詞中文翻譯查詢 與 輸入 help 導出所有單詞 功能。核心採用 TreeMap 實現單詞有序存儲與 O(log n) 查詢。

數據文件格式

詞典文件 doc.txt 採用管道符分隔單詞條,等號分隔鍵值:

hello=你好|man=男人|welcome=歡迎|...

核心代碼實現

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

public class ElectronicDictionary {

    private static final String DICT_PATH = "D:/dictionary/doc.txt"; // 路徑按實際情況修改
    private final Map dictionary = new TreeMap<>();

    /** 加載詞典文件構建索引 */
    public void loadDictionary() {
        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(new FileInputStream(DICT_PATH), "GBK"))) {

            String line;
            while ((line = reader.readLine()) != null) {
                parseAndStore(line.trim());
            }
            System.out.println("詞典加載完成,共 " + dictionary.size() + " 條目");
        } catch (IOException e) {
            System.err.println("詞典文件讀取失敗: " + e.getMessage());
        }
    }

    private void parseAndStore(String line) {
        String[] entries = line.split("\\|");
        for (String entry : entries) {
            String[] kv = entry.split("=", 2);
            if (kv.length == 2) {
                dictionary.put(kv[0].trim(), kv[1].trim());
            }
        }
    }

    /** 查詢單詞 */
    public String lookup(String word) {
        return dictionary.get(word);
    }

    /** 導出所有單詞 */
    public void exportAll() {
        dictionary.forEach((k, v) -> System.out.println(k + " " + v));
    }

    /** 主交互循環 */
    public void run() {
        loadDictionary();
        Scanner scanner = new Scanner(System.in);
        System.out.println("輸入單詞查詢,輸入 help 導出全部,輸入 exit 退出");

        while (scanner.hasNextLine()) {
            String input = scanner.nextLine().trim();
            if ("exit".equalsIgnoreCase(input)) break;

            if ("help".equalsIgnoreCase(input)) {
                exportAll();
            } else {
                String result = lookup(input);
                if (result != null) {
                    System.out.println(result);
                } else {
                    System.out.println("未找到該單詞: " + input);
                }
            }
        }
        scanner.close();
    }

    public static void main(String[] args) {
        new ElectronicDictionary().run();
    }
}

關鍵設計點解析

設計決策理由
TreeMap 而非 HashMap自動按鍵自然序(字典序)排序,help 導出天然有序,無需額外排序
GBK 編碼讀取兼容中文 Windows 環境下的文本文件編碼
split("=", 2) 限制分割數防止釋義中包含等號導致錯誤分割
try-with-resources自動關閉流,防止資源洩漏(JDK 7+)

運行示例

輸入單詞查詢,輸入 help 導出全部,輸入 exit 退出
> hello
你好
> man
男人
> help
hello 你好
man 男人
welcome 歡迎
...
> exit

擴展建議

  • 模糊查詢:引入 NavigableMap 的 subMap() 實現前綴匹配
  • 持久化優化:改用 SQLite 或 LevelDB 存儲,支持海量數據與增量更新
  • 編碼自動檢測:集成 juniversalchardet 自動識別文件編碼
  • GUI 界面:基於 Swing/JavaFX 構建圖形化查詢介面

這個迷你項目展示了 Java 集合框架、IO 流處理、編碼處理、控制台交互等基礎技能的綜合運用,是優秀的入門級實戰練習。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved