Java实现按指定起止关键词读取文本文件内容的方法
Java实现指定账号区间内容读取方案
实现思路
- 定义标记位
isReading,初始为false,用来标识是否处于目标内容读取区间 - 逐行读取文本文件,每行先判断是否为账号起始行:行首去除空白后是否为4位数字格式的账号
- 当匹配到目标账号
1056时,将isReading设为true,开始保存行内容 - 后续读取行时如果检测到新的账号行且账号不是1056,将
isReading设为false,直接终止读取即可 - 如果读取到文件末尾还没有遇到下一个账号,也自动终止读取
完整代码示例
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; public class ReadAccountContent { // 匹配行首是4位数字账号的正则,兼容行首带空格的格式 private static final Pattern ACCOUNT_PATTERN = Pattern.compile("^\\s*\\d{4}\\s+"); public static void main(String[] args) { String targetAccount = "1056"; String filePath = "你的文本文件路径.txt"; // 替换为实际的本地文件路径 List<String> result = readContentByAccount(targetAccount, filePath); // 输出读取结果 System.out.println("账号" + targetAccount + "对应的内容:"); result.forEach(System.out::println); } public static List<String> readContentByAccount(String targetAccount, String filePath) { List<String> contentList = new ArrayList<>(); boolean isReading = false; // try-with-resources语法自动关闭流,无需手动释放资源 try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { String line; while ((line = br.readLine()) != null) { boolean isAccountLine = ACCOUNT_PATTERN.matcher(line).find(); if (isAccountLine) { // 提取当前行的账号 String currentAccount = line.trim().split("\\s+")[0]; if (currentAccount.equals(targetAccount)) { isReading = true; contentList.add(line); } else if (isReading) { // 已进入读取状态,遇到下一个账号直接终止循环 break; } } else if (isReading) { // 非账号行且处于读取状态,直接保存内容 contentList.add(line); } } } catch (IOException e) { e.printStackTrace(); } return contentList; } }
补充说明
如果你只需要输出内容不需要保存,也可以直接在读取到对应行的时候打印,不需要额外用List存储。代码里的正则也可以根据你实际的账号格式调整,如果账号长度不是固定4位,修改正则里的\\d{4}对应规则即可。
内容的提问来源于stack exchange,提问作者user4383047
相关产品推荐
相关产品推荐

