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

Java从文件行列表提取指定前缀内容的问题求助

修正你的电影信息提取代码问题

我来帮你搞定这两个代码问题,一步步拆解修正:

问题1:变量未声明导致编译失败

你的getNextStringStartsWith方法里犯了两个变量声明的错误:

  • for循环里的i没有指定类型(Java是强类型语言,必须显式声明int i)
  • 用来存储提取结果的info变量也没有提前声明类型

问题2:匹配逻辑完全错误

你用this.lines.get(i).equals(str)判断行内容,这会要求整行和传入的前缀(比如Title:)完全一模一样,但实际行是Title: Avatar这种带内容的格式,根本匹配不上。应该用startsWith方法判断行是否以目标前缀开头。

修正后的完整代码

/**
 * Lines in the file.
 */
private List<String> lines;
private String title; // 补充声明成员变量,确保能正常赋值
private String director;

// 修正后的辅助方法
String getNextStringStartsWith(String prefix) {
    // 遍历每一行,注意声明int类型的循环变量i
    for (int i = 0; i < this.lines.size(); i++) {
        String currentLine = this.lines.get(i);
        // 判断当前行是否以目标前缀开头
        if (currentLine.startsWith(prefix)) {
            String[] lineParts = currentLine.split(":");
            // 加个长度判断,避免格式异常时数组越界
            if (lineParts.length >= 2) {
                return lineParts[1].trim();
            } else {
                // 处理没有内容的情况,返回空字符串或null都可以
                return "";
            }
        }
    }
    // 遍历完没找到匹配项,返回默认值
    return "";
}

// 提取标题和导演的方法
private void setTitleAndDirector() {
    this.title = getNextStringStartsWith("Title:");
    this.director = getNextStringStartsWith("Director:");
}

关键修正细节说明

  • 给循环变量i添加了int类型声明,同时用currentLine变量缓存当前行,提升代码可读性
  • 把equals替换成startsWith,终于能正确匹配Title: Avatar这类带内容的行
  • 增加了数组长度判断,避免遇到格式异常的行(比如只有Title:没有内容)时抛出数组越界异常
  • 补充了方法的默认返回值,Java要求所有代码分支都必须有返回结果,不然编译通不过
  • 补上了title和director两个成员变量的声明,确保赋值逻辑能正常工作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:08:54