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

