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

Java String matches方法斜杠匹配失效问题求助

问题分析与解决方案

核心问题

你代码里的关键错误在于对file.getFileName().toString()的理解:这个方法只返回文件的名称(比如目标文件返回的是overlay.properties),完全不包含任何路径分隔符/。所以你之前写的带\/的正则,自然找不到匹配项;而不带路径分隔符的正则又会匹配到文件名前缀带其他字符的文件(比如shouldnotmatchoverlay.properties)。

正确解决方案

根据你的需求,分三种场景给出方案:

场景1:仅匹配文件名恰好是overlay.properties的文件

直接用字符串相等判断,简单高效,完全避免正则的误匹配:

Files.walk(Paths.get(SOURCE_CONFIG_PATH))
     .filter(Files::isRegularFile)
     .filter(file -> "overlay.properties".equals(file.getFileName().toString()))
     .forEach(System.out::println);

场景2:必须用正则匹配文件名(比如后续有复杂规则)

用^和$限定正则的开头和结尾,确保整个文件名就是目标字符串:

Files.walk(Paths.get(SOURCE_CONFIG_PATH))
     .filter(Files::isRegularFile)
     .filter(file -> file.getFileName().toString().matches("^overlay\\.properties$"))
     .forEach(System.out::println);

场景3:需要同时验证文件所在的路径结构

如果要求文件必须在类似server1这类目录下,就需要用完整文件路径来匹配,此时调用file.toString()获取全路径:

Files.walk(Paths.get(SOURCE_CONFIG_PATH))
     .filter(Files::isRegularFile)
     .filter(file -> file.toString().matches(".*/server\\d+/overlay\\.properties$"))
     .forEach(System.out::println);

这个正则会匹配所有在server+数字目录下的overlay.properties文件,避免其他目录下的同名文件干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:20:59