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

Java处理VDA文件时匹配行首关键字后截取指定位置子串的问题

Java VDA格式文件行首匹配+固定位置截取实现方案

你原来的代码是把所有文件内容拼接成了一个完整字符串再截取,没法针对单独行做匹配,修改逻辑如下:

修改后的完整代码

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class Main {
    // 定义要匹配的行首关键字,可按需修改
    private static final String TARGET_PREFIX = "55901";
    // VDA格式每行固定长度,避免索引越界
    private static final int LINE_FIXED_LENGTH = 128;

    public static void main(String[] args) {
        File file = new File("C:\\Users\\Mail\\Desktop\\VDA Reader\\VDA.txt");
        // 用try-with-resources自动关流,不用手动写close
        try (Scanner scan = new Scanner(file)) {
            while (scan.hasNextLine()) {
                String currentLine = scan.nextLine().trim();
                // 空行直接跳过
                if (currentLine.isEmpty()) {
                    continue;
                }
                // 匹配行首关键字
                if (currentLine.startsWith(TARGET_PREFIX)) {
                    // 校验行长度符合要求再截取
                    if (currentLine.length() >= LINE_FIXED_LENGTH) {
                        // 按你需要的位置截取,示例截取5-12、13-20位置
                        String part1 = currentLine.substring(5, 12);
                        String part2 = currentLine.substring(13, 20);
                        // 后续可以加更多截取逻辑,也可以把结果存到集合里做后续处理
                        System.out.println("截取到的第一段内容:" + part1);
                        System.out.println("截取到的第二段内容:" + part2);
                    } else {
                        System.out.println("目标行长度不符合VDA规范,跳过处理");
                    }
                    // 如果只有一行55901的行,处理完可以直接break跳出循环,不需要再读后面的行
                    // break;
                }
            }
        } catch (IOException e) {
            System.out.println("文件读取出错:" + e.getMessage());
        }
    }
}

关键改动说明

  • 改用逐行处理逻辑,不需要把整个文件内容拼接成一个字符串,内存占用更低,也方便单独处理每一行
  • 用String.startsWith()方法直接做行首关键字匹配,逻辑简单高效
  • 增加了空行跳过、行长度校验逻辑,避免运行时抛出空指针、索引越界异常
  • 用try-with-resources语法自动管理Scanner流的关闭,不需要手动调用close()方法,避免资源泄漏
  • 你需要新增其他位置的截取逻辑,直接在匹配成功的代码块里加对应的substring语句即可,注意Java的substring参数是左闭右开,即substring(a,b)取的是下标从a到b-1的字符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:42:00