Java字典程序开发问题:动态变量名与Scanner文件读取难题
解决你的类字典程序问题
我来帮你一步步搞定这两个小问题,全程用你已经学过的知识来处理~
一、先澄清变量名的误区
你担心Java会把变量名固定成spelling,其实是个小误解!你在主方法里写WORD car = vocabulary.toWORD("car");的时候,car就是你自定义的对象名,和toWORD方法内部的变量名完全没关系。你之前的代码里犯了个小错误:方法里创建WORD对象时用了和参数同名的变量spelling,这会导致编译冲突,只要把方法里的对象变量名改成别的(比如word)就好。
二、修正文件读取的逻辑
你当前的Scanner用法有问题,findInLine(" - ")只会返回匹配的" - "字符串本身,而不是后面的释义。我们可以利用你txt文件里单词 - 释义的固定格式来拆分内容:
- 遍历每一行时,用
spelling + " - "作为前缀匹配,避免误抓到类似"carpet"这种包含目标单词的词汇 - 找到目标行后,直接截取" - "之后的部分作为释义即可
三、修正后的完整代码
1. 你的WORD类(新增一个getter方便直接获取词义)
public class WORD { private String spelling; private String meaning; public WORD(String spelling, String meaning) { this.spelling = spelling; this.meaning = meaning; } public String means() { return meaning; } public String spells() { return spelling; } public boolean is(String smth) { return smth.equalsIgnoreCase(spelling); } public boolean isSynonym(WORD syno) { return meaning.equals(syno.means()); } // 新增getter方法,满足你直接获取词义的需求(Java规范不建议直接访问私有变量) public String getMeaning() { return meaning; } }
2. 修正后的Vocabulary类(类名首字母大写符合Java规范)
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class Vocabulary { public WORD toWORD(String spelling) throws FileNotFoundException { File vocabFile = new File("vocabulary.txt"); Scanner seeker = new Scanner(vocabFile); String meaning = ""; String targetPrefix = spelling + " - "; // 精确匹配开头,避免误判 while (seeker.hasNextLine()) { String line = seeker.nextLine(); if (line.startsWith(targetPrefix)) { // 截取前缀之后的内容作为词义 meaning = line.substring(targetPrefix.length()); break; // 找到目标后立刻停止循环,提升效率 } } seeker.close(); // 记得关闭Scanner释放资源 // 这里用word作为变量名,和参数spelling不冲突 WORD word = new WORD(spelling, meaning); return word; } }
3. 主方法示例
import java.io.FileNotFoundException; public class Main { public static void main(String[] args) { try { Vocabulary vocab = new Vocabulary(); WORD car = vocab.toWORD("car"); // 用新增的getMeaning获取词义,或者用你原来的means()方法 System.out.println(car.getMeaning()); // 也可以写 System.out.println(car.means()); } catch (FileNotFoundException e) { System.out.println("找不到vocabulary.txt文件,请检查路径!"); e.printStackTrace(); } } }
四、关键细节说明
- 对象名问题:你在主方法里定义的
car就是WORD对象的引用名,完全由你自己决定,toWORD方法只负责返回一个WORD对象,你想赋值给什么变量名都可以。 - 文件读取优化:用
spelling + " - "匹配前缀能避免误识别,找到目标后break循环能减少不必要的遍历,关闭Scanner是良好的资源管理习惯。 - 关于
car.meaning:Java中私有成员变量不能直接访问,所以我们加了getMeaning()方法,这是Java封装特性的规范写法,比把meaning改成public更合理。
内容的提问来源于stack exchange,提问作者Mihkel Rüütli
相关产品推荐
相关产品推荐

