代码之家  ›  专栏  ›  技术社区  ›  James Jithin

字符串匹配方法-正斜杠不起作用

  •  1
  • James Jithin  · 技术社区  · 1 年前

    我正在尝试匹配以下模式的文件路径:

    /Users/someuser/folder/folder/config/server1/overlay.properties

    我使用以下代码遍历路径中的文件,并匹配上述模式的文件:

    String SOURCE_CONFIG_PATH = "/Users/someuser/folder/folder/config";
    
    Files.walk(Paths.get(SOURCE_CONFIG_PATH))
                    .filter(Files::isRegularFile)
                    .filter(file -> file.getFileName().toString().matches(".*/overlay\\.properties$"))
                    .forEach(file -> {System.out.println(file.toString());});
    

    这与文件不匹配,但以下代码匹配:

    filter(file -> file.getFileName().toString().matches(".*overlay\\.properties$"))
    

    也会选择 /Users/someuser/folder/folder/config/server1/shouldnotmatchoverlay.properties

    试过逃跑 / 导致 ".*\\/overlay\\.properties$" ".*\\\\/overlay\\.properties$" 这并没有解决问题。

    1 回复  |  直到 1 年前
        1
  •  2
  •   Robby Cornelissen    1 年前

    这个 getFileName() 方法只返回文件名,而不返回完整的路径,这并不奇怪。根据Javadoc的定义:

    文件名是 最远的 目录中根目录中的元素 等级制度

    对于的给定路径 /Users/someuser/folder/folder/config/server1/overlay.properties ,文件名为 overlay.properties 。如果您只需要将文件与该文件名匹配,而不管其路径如何,则不需要任何正则表达式,只需使用 equals() :

    filter(file -> file.getFileName().toString().equals("overlay.properties"))