2013-01-18 7 views
1

J'utilise l'expression ci-dessous regex:motif de fichiers regex

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)); 
    } 
} 

Cela fonctionne bien pour filename comme abc.txt mais s'il y a un fichier avec un nom abc1.txt la méthode ci-dessus donne abc2.txt. Comment rendre la condition regex ou changer (m.group(2) == null ? "_copy" + 1 : (Integer.parseInt(m.group(2)) + 1)) pour qu'il me retourne abc1_copy1.txt comme nouveau nom de fichier et non abc2.txt et ainsi de suite comme abc1_copy2 etc.

+0

il suffit de changer - '(Integer.parseInt (m.group (2)) + 1))' 'à (m.group (2) + "_copie" + 1) ' –

+0

@RohitJain Cela ne fonctionnera pas car il continuera à ajouter' _copy1' – user850234

Répondre

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); 
    } 
}