【发布时间】:2018-06-14 12:08:49
【问题描述】:
我有一个特定文件路径的文件夹列表 通过下面的代码搜索时,它会给出以下文件列表
File[] fileList = folderListLocation.listFiles(someFileFilter);
//it gives following list
fileList=[NUTS, BOLTS, CAR_COMPONENTS_ADT,CAR_COMPONENTS_ADT1, WINDSHIELD]
现在我正在尝试获取一个特定名称的文件夹的计数,这意味着如果我使用模式匹配器查找 CAR_COMPONENTS_ADT,它应该给我计数为 2,如果我使用模式匹配器查找 NUTS,我应该计数为 1
现在我正在使用以下代码将此文件列表与以下代码中的某些模式进行匹配
int count=0;
Pattern pattern = Pattern.compile(patternName);
for(File f: fileList){
Matcher matcher = pattern.matcher(f.getName());
if(matcher.find()){
count++;
}
}
现在在正常情况下这工作正常,比如如果 patternName = "BIRD",它将与文件列表和最终值不匹配
count will be 0
但如果 patternName = "CAR_COMPONENTS",则结果为
count as 2
所以我不明白的是,模式匹配器如何将“CAR_COMPONENTS”与“CAR_COMPONENTS_ADT”和“CAR_COMPONENTS_ADT1”匹配。即使它是一个子字符串,但我正在寻找完全匹配而不是部分匹配。
非常欢迎提出建议和改进。提前致谢
【问题讨论】:
-
在正则表达式的开头使用
^,在结尾使用$:^CAR_COMPONENTS_ADT$ -
这是否意味着只有在搜索词未包含字母或/和
_时才需要匹配?试试pattern.matcher("(?<![_\\p{L}])" + f.getName() + "(?![_\\p{L}])") -
会做,我也试过这个似乎有效
-
for(File f: fileList){ if(patternName.equals(f){ for(File t:fileList){ Matcher matcher = p.matcher(t) if(matcher.find(){计数++} } }}
-
哦,对不起,我把代码弄乱了一点,然后我会发布答案。
标签: java regex pattern-matching matcher