如何结合字符串数组元素,利用endsWith筛选目录中的目标文件?
实现文件名与扩展名的全组合匹配筛选
这问题很常见,核心思路就是先预先生成fileName和fileType的所有两两组合后缀,再遍历文件时检查文件名是否匹配其中任意一个后缀即可。下面给你两种实用的Java实现方式:
方式1:嵌套循环生成组合(直观易懂)
先通过两层嵌套循环把所有可能的后缀组合存入列表,之后用这个列表做批量判断:
import java.util.ArrayList; import java.util.List; // 定义你的字符串数组 String[] fileName = {"_clause", "_regulator"}; String[] fileType = {".txt", ".doc"}; // 生成所有目标后缀组合 List<String> targetSuffixes = new ArrayList<>(); for (String namePart : fileName) { for (String typePart : fileType) { targetSuffixes.add(namePart + typePart); } } // 遍历文件时的判断逻辑 if (textFiles.isFile()) { String currentFileName = textFiles.getName(); // 检查文件名是否匹配任意一个目标后缀 boolean matches = targetSuffixes.stream() .anyMatch(suffix -> currentFileName.endsWith(suffix)); if (matches) { // 这里处理符合条件的文件 System.out.println("匹配成功:" + currentFileName); } }
方式2:Stream流式生成组合(简洁优雅)
如果习惯用Java 8+的Stream API,可以用flatMap来更简洁地生成所有组合:
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; // 定义你的字符串数组 String[] fileName = {"_clause", "_regulator"}; String[] fileType = {".txt", ".doc"}; // 用Stream生成所有后缀组合 List<String> targetSuffixes = Arrays.stream(fileName) .flatMap(name -> Arrays.stream(fileType) .map(type -> name + type)) .collect(Collectors.toList()); // 后续的文件判断逻辑和方式1完全一致
额外小提示
如果你的场景需要忽略文件名大小写(比如同时匹配.DOC和.doc),可以把文件名和后缀都转成小写再判断:
boolean matches = targetSuffixes.stream() .anyMatch(suffix -> currentFileName.toLowerCase().endsWith(suffix.toLowerCase()));
内容的提问来源于stack exchange,提问作者Joel
相关产品推荐
相关产品推荐

