You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java自制记事本JTextPane拼写检查异常:所有单词被误判求助

修复Java记事本拼写检查的全错判定问题

首先得揪出你代码里的核心逻辑错误——你现在是对文件名做了拆分操作,而不是读取字典文件里的实际单词内容!这就导致你的字典数组里根本没有有效单词,自然所有文本都会被判定为拼写错误。

我们一步步来修正:

1. 正确读取字典文件并构建有效词库

你需要先把ordliste.txt里的单词真正读出来,而不是折腾文件名。用BufferedReader来读取文件是比较稳妥的方式:

void checkspell() {
    String filename = "ordliste.txt";
    ArrayList<String> dictWords = new ArrayList<>();
    
    // 读取字典文件内容
    try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
        String line;
        while ((line = br.readLine()) != null) {
            // 按任意空白符分割每行的单词(适配单行多词或单行一词的情况)
            String[] wordsInLine = line.split("\\s+");
            dictWords.addAll(Arrays.asList(wordsInLine));
        }
    } catch (IOException e) {
        e.printStackTrace();
        // 这里可以加个提示,比如弹窗告诉用户字典文件读取失败
        return;
    }

    // 读取JTextPane的内容并拆分成单词
    String textContent = jTextPane1.getText();
    String[] textWords = textContent.split("\\s+");

    // 逐个检查单词拼写
    for (String word : textWords) {
        // 统一转小写,避免大小写差异导致的误判
        String lowerCaseWord = word.toLowerCase();
        if (!dictWords.contains(lowerCaseWord)) {
            // 这里处理拼写错误的单词,比如给文本加红色下划线
            System.out.println("拼写错误:" + word);
        }
    }
}

2. 你原有代码的错误解析

你写的String split = String.valueOf(filename.split(" "));完全走偏了:

  • filename.split(" ")是把字符串"ordliste.txt"按空格拆分,结果就是一个只包含"ordliste.txt"的数组
  • 再用String.valueOf()转成字符串,得到的是类似[Ljava.lang.String;@xxxxxxx的数组内存地址,根本不是字典里的单词
  • 这样你的词库相当于空的,自然所有文本单词都匹配不上,全被判定错误

3. 额外优化小建议

  • 处理标点:文本里的单词可能带标点(比如hello!),可以先去掉首尾的非字母字符再检查
  • 词库去重:读取字典时可以用HashSet替代ArrayList,自动去重还能提高匹配效率
  • 忽略特殊字符:如果记事本支持特殊字符,可以过滤掉非字母数字的内容再检查

内容的提问来源于stack exchange,提问作者user9609068

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:31:22