Regex函数重命名文件问题



我使用以下代码自动重命名文件:

    public static String getNewNameForCopyFile(final String originalName, final boolean firstCall) {
    if (firstCall) {
        final Pattern p = Pattern.compile("(.*?)(\..*)?");
        final Matcher m = p.matcher(originalName);
        if (m.matches()) { //group 1 is the name, group 2 is the extension
            String name = m.group(1);
            String extension = m.group(2);
            if (extension == null) {
                extension = "";
            }
            return name + "-Copy1" + extension;
        } else {
            throw new IllegalArgumentException();
        }
    } else {
        final Pattern p = Pattern.compile("(.*?)(-Copy(\d+))?(\..*)?");
        final Matcher m = p.matcher(originalName);
        if (m.matches()) { //group 1 is the prefix, group 2 is the number, group 3 is the suffix
            String prefix = m.group(1);
            String numberMatch = m.group(3);
            String suffix = m.group(4);
            return prefix + "-Copy" + (numberMatch == null ? 1 : (Integer.parseInt(numberMatch) + 1)) + (suffix == null ? "" : suffix);
        } else {
            throw new IllegalArgumentException();
        }
    }
}

这主要只适用于以下文件名。我遇到了问题,不知道如何调整我的代码:test.abc.txt重命名后的文件变为"test-Copy1.abc.txt",但应为"test.abc-Copy1.txt"。

你知道我怎样才能用我的方法做到这一点吗?

如果我理解正确,您希望在文件名的最后一个点('.')之前插入一个副本编号(如果有的话),而不是在第一个点之前插入。这是因为您对第一组使用了不情愿的量词,而第二组能够匹配包含任意数量点的文件名尾部。我认为你会做得更好:

final Pattern p = Pattern.compile("(.*?)(\.[^.]*)?");

请注意,如果存在,则第二组以一个点开始,但不能包含其他点。

我想你要做的是找到最后一个"。"用名字,对吗?在这种情况下,你需要使用贪婪匹配.*(尽可能多地匹配)而不是.*?

final Pattern p = Pattern.compile("(.*)(\..*)")

您需要单独处理无点的情况:

if (originalName.indexOf('.') == -1) 
  return originalName + "-Copy1"
Your other code

相关内容

  • 没有找到相关文章

最新更新