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
相关产品推荐
相关产品推荐

