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

Java应用中用正则表达式筛选ABC/XYZ开头的CSV文件问题

Java读取指定前缀CSV文件的解决方案

问题分析

你之前使用的正则表达式存在语法错误,多余的")字符导致匹配失效,且Java环境下的文件匹配可以用更简便的原生API实现,无需复杂正则。

解决方案

1. 修正后的正则表达式

正确的正则应为:^(ABC|XYZ).*\.csv$

  • ^ 匹配文件名开头
  • (ABC|XYZ) 匹配以ABC或XYZ开头的前缀
  • .* 匹配任意长度的中间字符
  • \.csv$ 匹配以.csv结尾的后缀

Java中使用正则匹配文件名的示例代码:

import java.util.regex.Pattern;

public class FileRegexMatcher {
    public static void main(String[] args) {
        String filenameRegex = "^(ABC|XYZ).*\\.csv$";
        Pattern pattern = Pattern.compile(filenameRegex);

        // 测试示例文件名
        String[] testFiles = {"ABC_sales.csv", "XYZ_2024.csv", "normal.csv", "ABC.docx"};
        for (String file : testFiles) {
            if (pattern.matcher(file).matches()) {
                System.out.println("匹配文件:" + file);
            }
        }
    }
}

2. 更简便的Java原生文件过滤方式

直接使用FilenameFilter或Stream API过滤,无需正则,代码更直观:

import java.io.File;
import java.io.FilenameFilter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class CsvFileFilter {
    public static void main(String[] args) {
        String targetDir = "你的目标目录路径";

        // 方式1:使用FilenameFilter
        File dir = new File(targetDir);
        File[] matchedFiles = dir.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return (name.startsWith("ABC") || name.startsWith("XYZ")) && name.endsWith(".csv");
            }
        });

        if (matchedFiles != null) {
            for (File file : matchedFiles) {
                System.out.println("找到匹配文件:" + file.getName());
            }
        }

        // 方式2:Java 8+ Stream API
        try (Stream<Path> pathStream = Files.list(Paths.get(targetDir))) {
            pathStream.filter(Files::isRegularFile)
                      .map(Path::getFileName)
                      .map(Path::toString)
                      .filter(name -> (name.startsWith("ABC") || name.startsWith("XYZ")) && name.endsWith(".csv"))
                      .forEach(name -> System.out.println("找到匹配文件:" + name));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注意事项

  • 替换代码中的你的目标目录路径为实际目录路径
  • 若文件名存在大小写差异,可添加toLowerCase()统一处理,比如name.toLowerCase().startsWith("abc")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:35:02