如何在Java中从.txt文件提取指定学生ID对应的姓名到String变量?
解决方案
不用逐字符读取的话,推荐用BufferedReader逐行读取结合正则匹配的方式,既能高效处理文件,又能规避课程字段里包含逗号导致的分割错误问题。
实现步骤
- 用
BufferedReader逐行读取文件内容,避免一次性加载整个文件(适合大文件场景)。 - 针对每行内容,用正则表达式匹配出
studentID、studentName等字段——因为课程字段里可能包含逗号,直接用split(",")会出错。 - 判断当前行的
studentID是否为379,若是则提取对应的studentName赋值给变量name。
代码示例
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; public class StudentInfoReader { public static void main(String[] args) { String name = null; // 正则表达式:匹配每行的各个字段,兼容课程里的逗号 String regex = "(\\d+),([^,]+),([^,]+),([^,]+),(\\d+),([\\d.]+)(\\((.*?)\\)|,(null))"; Pattern pattern = Pattern.compile(regex); try (BufferedReader br = new BufferedReader(new FileReader("studentInfo.txt"))) { String line; while ((line = br.readLine()) != null) { Matcher matcher = pattern.matcher(line); if (matcher.matches()) { String studentId = matcher.group(1); if ("379".equals(studentId)) { name = matcher.group(2); break; // 找到目标后直接退出循环,提升效率 } } } } catch (IOException e) { e.printStackTrace(); } // 验证结果 System.out.println("目标学生姓名:" + name); } }
代码说明
- 正则表达式
(\\d+),([^,]+),([^,]+),([^,]+),(\\d+),([\\d.]+)(\\((.*?)\\)|,(null))的作用:(\\d+):匹配studentID(纯数字)([^,]+):匹配studentName、department、password(不含逗号的内容)(\\d+):匹配batch(纯数字)([\\d.]+):匹配cgpa(数字或带小数点的数值)(\\((.*?)\\)|,(null)):匹配课程部分,兼容(xxx, xxx)和,(null)两种格式
- 使用
try-with-resources自动关闭BufferedReader,避免资源泄漏。 - 找到目标ID后立即
break循环,无需继续读取后续行,提升处理效率。
内容的提问来源于stack exchange,提问作者Pronay Sarker
相关产品推荐
相关产品推荐

