我正在使用以下正则表达式:
Pattern p = Pattern.compile("(.*?)(\\d+)?(\\..*)?");
while(new File(fileName).exists())
{
Matcher m = p.matcher(fileName);
if(m.matches()) { //group 1 is the prefix, group 2 is the number, group 3 is the suffix
fileName = m.group(1) + (m.group(2) == null ? "_copy" + 1 : (Integer.parseInt(m.group(2)) + 1)) + (m.group(3)==null ? "" : m.group(3));
}
}
这适用于filename
abc.txt
,但如果有任何名称为abc1.txt
的文件,则上述方法会提供abc2.txt
。如何制作正则表达式条件或更改(m.group(2) == null ? "_copy" + 1 : (Integer.parseInt(m.group(2)) + 1))
,以便它将abc1_copy1.txt
作为新文件名返回,而不是abc2.txt
,如abc1_copy2
等等。
答案 0 :(得分:0)
我不是一个java人,但一般来说,你应该使用库函数/类来解析文件名,因为许多平台都有不同的规则。
答案 1 :(得分:0)
Pattern p = Pattern.compile("(.*?)(_copy(\\d+))?(\\..*)?");
while(new File(fileName).exists())
{
Matcher m = p.matcher(fileName);
if (m.matches()) {
String prefix = m.group(1);
String numberMatch = m.group(3);
String suffix = m.group(4);
int copyNumber = numberMatch == null ? 1 : Integer.parseInt(numberMatch) + 1;
fileName = prefix;
fileName += "_copy" + copyNumber;
fileName += (suffix == null ? "" : suffix);
}
}