【问题标题】:Files java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 5 [duplicate]文件 java.util.regex.PatternSyntaxException:索引 5 附近的非法/不受支持的转义序列 [重复]
【发布时间】:2020-10-10 11:00:05
【问题描述】:

您好,我想复制没有单曲文件或文件夹的文件。

当我运行该方法时,我得到一个堆栈

public static void copyFiles() {
    String path = "C:\\luna\\trunk\\";
    List<File> files = (List<File>) FileUtils.listFiles(new File(path), new SuffixFileFilter("-4.7-SNAPSHOT.jar"), TrueFileFilter.INSTANCE);
    Pattern pattern = Pattern.compile("^(C:\\luna\\trunk\\lunaRelease\\target\\lib\\)");
    for (File file : files) {
        Matcher matcher = pattern.matcher(file.getName());
        if (file.getName().matches("warsztaty-4.7-SNAPSHOT.jar") || file.getName().matches("lunaRelease-4.7-SNAPSHOT.jar") || matcher.find() ) {
            System.out.println("Don't copy this file");
        } else {
            System.out.println(file.getAbsolutePath());
            String source = file.getAbsolutePath();
            File sourcedir = new File(source);
            File dest = new File("C:\\library");
            try {
                FileUtils.copyFileToDirectory(sourcedir, dest);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

这是我运行方法时的堆栈。

"C:\Program Files\Java\jdk1.8.0_251\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 5
^(C:\luna\trunk\lunaRelease\target\lib\)
     ^
    at java.util.regex.Pattern.error(Pattern.java:1969)
    at java.util.regex.Pattern.escape(Pattern.java:2485)
    at java.util.regex.Pattern.atom(Pattern.java:2212)
    at java.util.regex.Pattern.sequence(Pattern.java:2144)
    at java.util.regex.Pattern.expr(Pattern.java:2010)
    at java.util.regex.Pattern.group0(Pattern.java:2919)
    at java.util.regex.Pattern.sequence(Pattern.java:2065)
    at java.util.regex.Pattern.expr(Pattern.java:2010)
    at java.util.regex.Pattern.compile(Pattern.java:1702)
    at java.util.regex.Pattern.<init>(Pattern.java:1352)
    at java.util.regex.Pattern.compile(Pattern.java:1028)
    at CopyFiles.copyFiles(CopyFiles.java:23)
    at CopyFiles.main(CopyFiles.java:17)

Process finished with exit code 1

我该如何解决?

【问题讨论】:

  • 尝试将 \\ 替换为 \\\\。
  • 嗯,错误信息没有错,正则表达式语法中没有\l 特殊序列,例如\d\w \s 所以\ 不应该可能是这样的序列的开始,所以它应该被转义。表示\ 的正则表达式可能看起来像\\,它可以用字符串文字写成"\\\\"。但是你为什么首先使用正则表达式?为什么是matches("warsztaty-4.7-SNAPSHOT.jar") 而不是equals("warsztaty-4.7-SNAPSHOT.jar")(同样关于`lunaRelease-4.7-SNAPSHOT.jar)。
  • 另外,如果您使用正则表达式的唯一目标是使用其行/数据开头^ 锚点,那么您可以使用strData.startsWith(sequence) 实现类似的效果
  • 我解决了这样的问题:file.getAbsolutePath().startsWith("C:\\luna\\trunk\\lunaRelease\\target\\lib\\")

标签: java regex file


【解决方案1】:

新方法,因为我不想复制路径 startwith : C:\luna\trunk\lunaRelease\target\lib\"

public static void copyFiles() {
    String path = "C:\\luna\\trunk\\";
    List<File> files = (List<File>) FileUtils.listFiles(new File(path), new SuffixFileFilter("-4.7-SNAPSHOT.jar"), TrueFileFilter.INSTANCE);
    for (File file : files) {
        if (file.getName().matches("warsztaty-4.7-SNAPSHOT.jar") || file.getName().matches("lunaRelease-4.7-SNAPSHOT.jar") || file.getAbsolutePath().startsWith("C:\\luna\\trunk\\lunaRelease\\target\\lib\\") ) {
            System.out.println("Don't copy this file");
        } else {
            System.out.println(file.getAbsolutePath());
            String source = file.getAbsolutePath();
            File sourcedir = new File(source);
            File dest = new File("C:\\library");
            try {
                FileUtils.copyFileToDirectory(sourcedir, dest);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

感谢您的帮助。

【讨论】:

  • 注意:matcher 也使用正则表达式,并且在正则表达式中,点 . 代表任何字符,因此 .matches("warsztaty-4.7-SNAPSHOT.jar") 也会为 .matches("warsztaty-4#7-SNAPSHOT#jar") 返回 true。
  • 要检查确切的值,请使用equals 而不是matches
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多