gpt4 book ai didi

Java 8 : How to list files that don't match pattern using regex

转载 作者:太空宇宙 更新时间:2023-11-04 09:29:33 27 4
gpt4 key购买 nike

出于某种原因,当我希望它只打印出与我的正则表达式模式不匹配的文件时,我的代码将打印所有文件。我需要它打印出与模式不匹配的文件,因为我不知道文件命名中可能存在的所有不一致之处。我在 regex101 上检查了我的正则表达式模式,它是正确的。我不是编码员,但我是一名从事海量数据库工作的心理学学生。

我尝试将 Pattern 制作为列表模式,并尝试将patternList.matcher(file.getName()) 放入其自己的 Matcher 变量中。

    private static void checkFolder(File root, Pattern patternList) {
for(File file : root.listFiles())

if(file.isFile()){

if(patternList.matcher(file.getName()).matches())
checkFolder(file, patternList);
else
System.out.println(file); //print if it does not match
}

例如,如果我的代码查看这些文件名:

  • 95F前愤怒.BW
  • 95F.Front.Anger.C.Micro
  • 95F.Front.Fear.C.Micro
  • 95F.Front.Frown.BW

我的正则表达式是这样的:

    Pattern patternList = Pattern.compile("((\\d{1,3}(F|M)\\.(Front|Profile|Right)"
+"\\.(Anger|Fear|Frown|Smile)\\.(BW\\.Micro|BW|C\\.Micro|C)))|"
+"(\\d{1,3}(F|M)\\.(Front|Profile|Right)\\.(Neutral|Smile)\\."
+"(C\\.Micro|C|BW\\.Micro|BW|HighLight|LowLight|MedLight)\\.(BW\\.Micro|BW|C\\.Micro|C))|"
+"(\\d{1,3}(F|M)\\.(Selfie1|Selfie2|StudentID)\\.(C\\.Micro|C|BW\\.Micro|BW))")

我的代码应该只打印出 95F Front Anger.BW,因为它有空格而不是点,但我的代码仍然打印出所有四个文件名。

我也尝试这样做:

    private static void checkFolder(File root, Pattern patternList) {
for(File file : root.listFiles())

if(file.isFile()){

if(patternList.matcher(file.getName()).matches()){
checkFolder(file, patternList); //call checkfolder if the filename matches the pattern

}
else if(!patternList.matcher(file.getName()).matches())
{
System.out.println(file); //print the file that doesnt match the regex
}

}

最佳答案

未经测试,但我猜你想要这样的东西,假设你只寻找与模式匹配的文件:

private static void checkFolder(File dir, Pattern patternList) {
for(File file : dir.listFiles()) {
if (file.isFile()) {
// only check pattern against files not directories
if(!patternList.matcher(file.getName()).matches())
System.out.println(file);
} else {
// recurse into any/all sub-directories
checkFolder(file, patternList);
}
}
}

如果您想对结果执行某些操作而不仅仅是打印结果,则可以连接到一个列表中。

(是的,为了迂腐地完成,如果您希望遍历深层文件系统路径,则递归不是最好的解决方案,这可以更改为使用堆栈进行循环,但代价是额外的复杂性)

关于Java 8 : How to list files that don't match pattern using regex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57260425/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com