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

Java字典程序开发问题:动态变量名与Scanner文件读取难题

解决你的类字典程序问题

我来帮你一步步搞定这两个小问题,全程用你已经学过的知识来处理~

一、先澄清变量名的误区

你担心Java会把变量名固定成spelling,其实是个小误解!你在主方法里写WORD car = vocabulary.toWORD("car");的时候,car就是你自定义的对象名,和toWORD方法内部的变量名完全没关系。你之前的代码里犯了个小错误:方法里创建WORD对象时用了和参数同名的变量spelling,这会导致编译冲突,只要把方法里的对象变量名改成别的(比如word)就好。

二、修正文件读取的逻辑

你当前的Scanner用法有问题,findInLine(" - ")只会返回匹配的" - "字符串本身,而不是后面的释义。我们可以利用你txt文件里单词 - 释义的固定格式来拆分内容:

  1. 遍历每一行时,用spelling + " - "作为前缀匹配,避免误抓到类似"carpet"这种包含目标单词的词汇
  2. 找到目标行后,直接截取" - "之后的部分作为释义即可

三、修正后的完整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:22:39